在一次查询中更新mysql列表顺序(上移、下移)
如果我只知道一个id,有没有办法在一个查询中上移/下移列表项 像这样的在一次查询中更新mysql列表顺序(上移、下移),mysql,Mysql,如果我只知道一个id,有没有办法在一个查询中上移/下移列表项 像这样的 update tbl SET list_order = CASE WHEN id = 10 THEN (SELECT list_order FROM tbl WHERE list_order > (SELECT list_order FROM tbl WHERE id = 10) ORDER BY list_
update tbl
SET list_order =
CASE
WHEN id = 10
THEN (SELECT list_order FROM tbl
WHERE list_order > (SELECT list_order FROM tbl WHERE id = 10)
ORDER BY list_order ASC LIMIT 1)
WHEN id = (SELECT id FROM tbl
WHERE list_order > (SELECT list_order FROM tbl WHERE id = 10)
ORDER BY list_order ASC LIMIT 1)
THEN (SELECT list_order FROM tbl WHERE id = 10)
ELSE list_order
END
tbl
至>
我对这个问题示例的答案在ID为10的列表行中上移
UPDATE tbl e
JOIN (SELECT id, list_order FROM tbl
WHERE list_order < (SELECT list_order FROM tbl WHERE id = 10)
ORDER BY list_order DESC LIMIT 1) t1
JOIN (SELECT list_order FROM tbl WHERE id = 10) t2
SET e.list_order = CASE
WHEN e.id = 10
THEN t1.list_order
WHEN e.id = t1.id
THEN t2.list_order
ELSE e.list_order
END
如果将id 22向上移动一个-
UPDATE tbl t1
INNER JOIN tbl t2
ON t1.list_order - 1 = t2.listorder
SET
t1.list_order = t1.list_order - 1,
t2.list_order = t2.list_order + 1
WHERE t1.id = 22;
如果将id 22向上移动一个-
UPDATE tbl t1
INNER JOIN tbl t2
ON t1.list_order - 1 = t2.listorder
SET
t1.list_order = t1.list_order - 1,
t2.list_order = t2.list_order + 1
WHERE t1.id = 22;
不清楚。你到底想做什么,请给出一个可能重复的例子。你到底想做什么,请举一个可能重复的例子。。仅当您具有正确的列表顺序1、2、3时,此选项才有效。如果您删除列表顺序为2的行,这将不再有效,这是我的意图。如果这是唯一用于修改列表顺序的代码,那么这无关紧要。还有什么代码修改列表顺序?为什么列表最终会有漏洞?删除位置2中的项目时,应从所有位置大于2的条目中减去1。类似地,如果在位置3处插入,则应在位置>=3的所有条目中添加1。足够公平。我给出了一个最简单的查询,它基于维护列表顺序的连续集。我喜欢让这些东西保持连续,但这是不必要的,只是我喜欢做的事。。仅当您具有正确的列表顺序1、2、3时,此选项才有效。如果您删除列表顺序为2的行,这将不再有效,这是我的意图。如果这是唯一用于修改列表顺序的代码,那么这无关紧要。还有什么代码修改列表顺序?为什么列表最终会有漏洞?删除位置2中的项目时,应从所有位置大于2的条目中减去1。类似地,如果在位置3处插入,则应在位置>=3的所有条目中添加1。足够公平。我给出了一个最简单的查询,它基于维护列表顺序的连续集。我喜欢让这些事情保持连续,但这是不必要的,只是我喜欢做的事情。
UPDATE tbl t1
INNER JOIN tbl t2
ON t1.list_order - 1 = t2.listorder
SET
t1.list_order = t1.list_order - 1,
t2.list_order = t2.list_order + 1
WHERE t1.id = 22;