我在 PHP 中使用以下 MySQL 语句,直接在 MySQLWorkBench 中输入它们会产生截然不同且意想不到的结果:
SET SQL_SAFE_UPDATES = 0;
SET @idx = 1;
UPDATE Database.Table SET sequence = 9999 WHERE category = 'MyCat' AND sequence = 15;
UPDATE Database.Table SET sequence = @idx := @idx + 1 WHERE category = 'MyCat' AND sequence >= 1 AND sequence <= 15 ORDER BY sequence;
UPDATE Database.Table SET sequence = 1 WHERE category = 'MyCat' AND sequence = 9999;
SELECT * FROM Database.Table WHERE category = 'MyCat';
它在 MySQLWorkbench 中按预期工作,但在 PHP 中完全奇怪。首先,序列 = 15 处的记录根本不会移动,另一个不相关的序列号可能会也可能不会代替它。
最佳答案
您是从 PHP 执行多个单独的查询还是单个多语句查询?
如果是第一个,您的 session 变量 @idx
将不起作用。
无论如何,你为什么要这样做? 像这样的简单查询有什么问题:
UPDATE
Database.Table
SET
sequence = IF(sequence = 15, 1, sequence + 1)
WHERE
category = 'MyCat'
AND sequence BETWEEN 1 AND 15
;
关于php - MySQL Workbench 与 PHP 的执行结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59639172/