我会尽力概述我的问题和疑问。
问题:
我从MySQL数据库导出了我的文章,但没有保留原始主键ID。我将它转移到另一个数据库,它变得混乱。问题是,根据table_contents中的主键ID,Created Date列不按顺序排列。其他一些信息。是PK是自动递增。见下图:
如您所见,创建日期根本不是按时间顺序排列的。现在,当我按创建日期对表格进行排序时:
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
答案 0 :(得分:0)
使用update
和order 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列中的值插入表中新创建的列,然后您可以创建此新列主键并删除旧的主键列。