Php 将现有记录重新排序并重新标识为具有相同结构的新表
phpmysqlsqldatetimeindexing
Php 将现有记录重新排序并重新标识为具有相同结构的新表,php,mysql,sql,datetime,indexing,Php,Mysql
Php 将现有记录重新排序并重新标识为具有相同结构的新表 phpmysqlsqldatetimeindexing Php 将现有记录重新排序并重新标识为具有相同结构的新表,php,mysql,sql,datetime,indexing,Php,Mysql,Sql,Datetime,Indexing,我有一个名为table_name的表,它有几列,包括id type=INT、autoincrement、primary和date type=datetime格式的Y-m-d h:m:sid与datetime列的时间顺序不匹配,因为一旦该表与另一个表合并。我不介意在id计数上有差距,但我希望至少根据列日期按时间顺序排列为了方便起见,我已经准备了一个与原始引用表格式完全相同的空表,名为table_name_new那么,如何实现索引id值的重新分配呢PHP或SQL都是受欢迎的当前状态示例: 我有一个名为table_name的表,它有几列,包括id type=INT、autoincrement、primary和date type=datetime格式的Y-m-d h:m:s id与datetime列的时间顺序不匹配,因为一旦该表与另一个表合并。我不介意在id计数上有差距,但我希望至少根据列日期按时间顺序排列 为了方便起见,我已经准备了一个与原始引用表格式完全相同的空表,名为table_name_new 那么,如何实现索引id值的重新分配呢 PHP或SQL都是受欢迎的 当前状态示例: 预期结果: 询问您要求的查询是: 插入“表名”中的新“颜色”和“日期”`从“表格名称”中按“日期”顺序选择“颜色”、“日期”;进一步的文档描述了MySQL中类似操作的其他变体 但正如许多评论所说,不建议在定义id之后再使用id。代码的其他部分可能希望id具有某种意义。此外,在需要时使用ORDERBY子句对记录重新排序非常简单 因此,除非您确定id在整个代码库中是绝对微不足道/毫无意义的,否则建议您不要进行此类操作 请慎重考虑。 如何防止手动构建列列表仅忽略1列?不幸的是,没有MySQL语法直接支持通过定义要省略的表列来选择表列。但是,我们可以构建自己的SQL查询以供其他MySQL查询运行 假设 你有正确的许可;和您已经在正确的数据库中;那么 --构建一个逗号分隔的列列表,省略'id',和'id'`-作为会话变量@列--@列将是我们问题中示例表的'color','date'。-设置@columns=选择replaceGroup_CONCATCONCAT'`',列名'`',id'',','id'',',从信息_SCHEMA.COLUMNS其中TABLE_NAME='TABLE_NAME'和TABLE_SCHEMA=选择数据库;--根据@columns构建SQL查询字符串@SQL-SET@sql=CONCAT'插入到'table\u name\u new`'中,@专栏,“选择”,@专栏,'从'table_name'按日期排序;';--准备并执行SQL语句-从@sql准备stmt1;执行stmt1;除了颜色,你还需要保留什么吗?如果没有,则将数据导出为INSERT查询,并将id替换为NULL,将日期替换为NOW。我不介意id计数中存在间隙,但我希望至少根据列日期按时间顺序进行。为什么?@Daniel这些ID在其他表格的其他地方也有使用吗?就像外键一样。如果是的话,那么重新排列id值并不是一个好主意。从您编写的内容来看mysql排序,除了个人OCD之外,您没有真正的理由想要篡改合成主键。如果你什么都不做,一切都会成功。如果你乱动它,东西就会死。你什么都不做怎么样?在100个案例中的100个案例中,试图强制自动递增重复使用数字或不存在缺口会导致灾难。为什么不添加一个额外的列,称之为number,以满足我的ocd,并按顺序保持其值?您使用的列不正确-auto_increment不是供人触摸的。该功能在不推荐使用的MyISAM中可用,但在InnoDB中不可用。另请参见:是否可能您混淆了table_name和table_name_new,因为我实际上想插入到新的表中?顺便说一句,当我切换表名时,您的解决方案非常有效。我希望有一个通用的解决方案,不必写下所有的列名,因为在实际的原始表中有相当多的列名,但无论如何。一旦你更正了你的帖子,我就可以批准它。@DanielM:添加了使用MySQL自动生成列列表的方法。
(编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |