加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Php 将现有记录重新排序并重新标识为具有相同结构的新表

发布时间:2022-12-03 10:33:58 所属栏目:MySql教程 来源:未知
导读: 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自动生成列列表的方法。

+----+--------+---------------------+
| id | color  | date                |
+----+--------+---------------------+
| 1  | blue   | 2019-05-06 20:30:00 |
| 2  | orange | 2019-05-12 10:30:00 |
| 8  | yellow | 2019-05-18 22:30:00 |
| 4  | white  | 2019-05-29 12:30:00 |
| 9  | black  | 2019-06-10 09:30:00 |
| 10 | green  | 2019-06-14 08:30:00 |
| 3  | red    | 2019-06-24 17:30:00 |
| 5  | purple | 2019-07-05 10:30:00 |
| 7  | brown  | 2019-08-09 19:30:00 |
| 6  | grey   | 2019-09-12 20:30:00 |
+----+--------+---------------------+

+----+--------+---------------------+
| id | color  | date                |
+----+--------+---------------------+
| 1  | blue   | 2019-05-06 20:30:00 |
| 2  | orange | 2019-05-12 10:30:00 |
| 3  | yellow | 2019-05-18 22:30:00 |
| 4  | white  | 2019-05-29 12:30:00 |
| 5  | black  | 2019-06-10 09:30:00 |
| 6  | green  | 2019-06-14 08:30:00 |
| 7  | red    | 2019-06-24 17:30:00 |
| 8  | purple | 2019-07-05 10:30:00 |
| 9  | brown  | 2019-08-09 19:30:00 |
| 10 | grey   | 2019-09-12 20:30:00 |
+----+--------+---------------------+

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!