我想要做的是运行一个选择某些mysql条目的PHP脚本,然后将它们移动到表格的顶部(或者只是在插入时自动递增id列)。
说明:我有一个包含100个条目的表。进入49和条目88必须像这样更新:删除条目49,所有数据仍然在表中,插入,但ID为101。
对于条目88,相同:删除/更新具有值88的id列的行,更新新条目/相同条目,其ID为102,但数据相同。
此外,脚本运行后不会出现重复ID等问题,需要一个对mysql友好的解决方案。
你明白了吗?
我的问题是:如何以最有效和最简单的方式完成这项工作?
我想到的唯一选择是很长并且似乎不必要地复杂:选择整行,删除它,插入包含所有数据的新行并让id自动递增...
如果有人愿意与我分享他们对此事的看法,我将非常感激!
其他信息:脚本将每天运行一次,功能强大的apache专用服务器。不需要优化,要求简单解决方案的问题要求一种简单的方法来处理我的问题,而不需要那么努力工作。
感谢大家的帮助!我感谢你的每一句答案和评论!我认为这个问题不能比我上面说的更简单,使用一块PHP,我现在正在关闭这个问题。我再次说,感谢所有回答的人!如果您想要解决问题或者使用php,请在这里回答我会阅读它,或者至少我们可能会帮助将来阅读此主题的任何其他人,假设2012年不会带来世界末日......在这种情况下,没有人会再阅读这个帖子了,你也可能不会发帖...但我想认为未来是我们的决定:P ...再次感谢大家!干杯!
答案 0 :(得分:2)
你知道UPDATE
类型的查询太对了吗?
UPDATE `table`
SET `field1`='value1', `field2` = 'value2', `id`=LAST_INSERTED_ID()+1
WHERE `id` = 49;
为什么Pure Evil警告?您永远不能永远 EVER EVER 更改现有条目的ID,因为它必将搞乱您的表。最后一个代码是纯理论,不推荐使用。
答案 1 :(得分:1)
我发现了一篇解释A Point In Time database design的文章。本文介绍如何使用triggers来实现设计。您可以使用此解决方案创建一个触发器,而不是删除,更新ID。
如前所述,弄乱你的ID是非常危险的,并且肯定会迟早损坏你的数据。
答案 2 :(得分:1)
我真的不知道你为什么需要它,但这是我认为最好的查询:
UPDATE %table% SET id = (SELECT Auto_increment FROM information_schema.tables
WHERE table_schema = DATABASE() && table_name = '%table%') WHERE id = %id%
如果你想确保数据库不会搞砸,请使用事务(InnoDB)或LOCK(MyISAM)
InnoDB的
START TRANSACTION;
UPDATE %table% SET id = (SELECT Auto_increment FROM information_schema.tables
WHERE table_schema = DATABASE()&& table_name ='%table%')WHERE id =%id%; COMMIT;
的MyISAM
LOCK TABLES %table% WRITE;
UPDATE %table% SET id = (SELECT Auto_increment FROM information_schema.tables
WHERE table_schema = DATABASE()&& table_name ='%table%')WHERE id =%id%; 解锁表格;