将表主键ID更改为创建日期的顺序

时间:2016-04-14 02:26:27

标签: mysql database joomla phpmyadmin

我会尽力概述我的问题和疑问。

问题:

我从MySQL数据库导出了我的文章,但没有保留原始主键ID。我将它转移到另一个数据库,它变得混乱。问题是,根据table_contents中的主键ID,Created Date列不按顺序排列。其他一些信息。是PK是自动递增。见下图:

Table sorted by ID

如您所见,创建日期根本不是按时间顺序排列的。现在,当我按创建日期对表格进行排序时:

Table sorted by Created Date

ID也不合适。

可能的解决方案:

我可以手动重新编辑表格中的每一项,但这需要很长时间。

我的想法:

我是SQL的初学者,但是我可以写什么样的SQL查询来做我想做的事情?我想我必须创建table_contents的副本,将原始文件和副本合并在一起,然后按创建日期按顺序更改ID。我不确定如何编写查询,说实话。

我的问题:

如何通过内容创建日期列编写查询以将主键ID列更改为按时间顺序升序?

关闭:

如果我不清楚或者这是不可能的,请告诉我。谢谢!

编辑:所以从目前为止的反馈中我尝试编写一个查询:

ALTER TABLE skwx_content;
SELECT @row_num := @row_num + 1 as newid, skwx_content.id from skwx_content    , (select @row_num := 0) x order by skwx_content.created asc
ALTER TABLE skwx_content DROP PRIMARY KEY;
ADD COLUMN newid INT(10) NOT NULL AUTO_INCREMENT FIRST ORDER BY   skwx_content.created ASC,
ADD PRIMARY KEY (newid);
ALTER TABLE skwx_content CHANGE newid id INT(10);

根据我的尝试我得到错误:puu.sh/ohBAC/c3a8b12340.png

2 个答案:

答案 0 :(得分:0)

使用updateorder by user variable即可。

set @max_id = (select max(id) from mytable);
set @id = @max_id;
update mytable set id = (@id := @id + 1) order by created;
update mytable set id = id - @max_id;

执行上述SQL后,id将从1开始。

答案 1 :(得分:0)

虽然主键不需要与任何其他列按顺序排列,因为您可以查询数据并按照您想要的任何方式对其进行排序,但如果您想这样做,您可以使用此查询来获取行号列基于创建日期

select @row_num := @row_num + 1 as RowNumber, t.[PrimaryKeyColumn] from [tablename] t, (select @row_num := 0) x order by t.CreatedDate asc

您可以通过将此查询与基于主键的表连接,将RowNumber列中的值插入表中新创建的列,然后您可以创建此新列主键并删除旧的主键列。