3

假设我有一个这样设置的数据库,我想通过将优先级更改为最后一个数字 + 1 来将 Milk 移动到最后。

编号 | 项目 | 优先
---|--------|----------   
[...]
26 | 牛奶 | 1
27 | 鸡蛋 | 2
28 | 火腿 | 3

所以我需要运行这样的东西

UPDATE shopping SET priority = (SELECT priority FROM shopping ORDER BY priority DESC LIMIT 1) + 1 WHERE id = '26'

最后得到这样的东西

编号 | 项目 | 优先
---|--------|----------   
[...]
27 | 鸡蛋 | 2
28 | 火腿 | 3
26 | 牛奶 | 4

我该如何正确地做到这一点?

4

2 回答 2

0
UPDATE `shopping` s, (
    SELECT
        MAX(`priority`) AS 'maxPriority',
        MAX(`id`) AS 'maxId'
    FROM `shopping`
) t
SET
    s.`priority` = t.`maxPriority` + 1,
    s.`id` = t.`maxId` + 1
WHERE s.`id`=26
AND s.`priority` != t.`maxPriority`
# this ensures that it's not the one that's
# already holding the max priority
于 2012-09-28T15:35:14.670 回答
0

您的要求可能是:

UPDATE shopping SET priority = (select max(priority)+1) where id=26;

但这不起作用,您必须在此处对请求、来源和详细信息进行相同的更改:

http://the-stickman.com/uncategorized/mysql-update-with-select-on-the-same-table-in-the-same-query/

于 2012-09-28T16:40:50.833 回答