我有一个MySql products表(通过PHP和PDO访问),其结构如下:

CREATE TABLE IF NOT EXISTS `products` (
  `id` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `order` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

产品通过订单字段显示。删除产品时,我想减少以下所有行的订单值(即,如果删除带有order=2的产品,我想将以下行从order=3更新为order=2,下一行从order=4更新为order=3,依此类推…)。
显然我想用PDO以最有效的方式进行这个查询。我在PhpMyAdmin中找到了this question并尝试了以下语句:
UPDATE products SET order = order - 1 WHERE (order>2)

但它给了我以下错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order = order - 1 WHERE (order>2)' at line 1

我错过了什么?然后,用PDO编写它的正确方法是什么?

最佳答案

ORDER is the reserved word。使用反勾号将其转义:

UPDATE `products` SET `order` = `order` - 1 WHERE (`order` > 2);

关于php - 使用PHP和PDO在多行上减少列值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25618112/

10-16 07:47