我有一个很长的数据库列表,我希望按名称组更新字段。我想将前30个更新为值' 1'下一个30来重视' 2'等等到最后
关于如何去做的任何想法
$sql = mysqli_query($conn,
"UPDATE `tablename` SET `group` = '$value' WHERE id IN (SELECT id FROM tablename ORDER BY id desc LIMIT 0, 30)");
答案 0 :(得分:3)
您遇到了mysql
的限制您无法更新表格并从中选择同一个表格 子查询。
您可以使用更新联接,但由于涉及限制,您将再次遇到同样的问题。由于只涉及少量记录,因此您可以进行简单的查询以获取ID。
SELECT GROUP_CONCAT(id) FROM tablename ORDER BY id desc LIMIT 0, 30
然后在下一个查询中使用它
UPDATE `tablename` SET `group` = '$value' WHERE id IN (ids_from_above_query)
如果您担心并发更新,请启动交易。
答案 1 :(得分:2)
如果您的更新是一次性的(并且不需要对其进行优化,例如在一个查询中完成所有操作),您只需重复以下查询,直至完成:
update `tablename`
SET `group` = '$value'
where `group` is null
order by id desc
limit 30;
所有组值必须为空(或其他一些未使用的值),例如,首先使用update tablename SET group = null
,如果他们不是。
您可能希望在交易中完成所有操作。