我正在从 MySQL 表中以无序列表的形式获取我的页面菜单 <ul></ul>
按他们的位置排序,这是我的 MySQL 表的屏幕截图
我希望查询的工作方式类似于获取 page_id_pk=3 的记录时,它将其 page_position 从 3 设置为 2 并更新它,因此现在它保持 page_position 2。其余页面(行)向下移动增加一。 我不想只交换两行,而是要改变它们的位置,即它们的 page_id_pk 序列将保持不变,只是它们的位置发生了变化。
最佳答案
类似这样的交换
UPDATE `position_table` SET `page_position` = CASE
WHEN (`page_position`=1) THEN 2
WHEN (`page_position`=2) THEN 1
END
WHERE `page_position` in (1, 2) -- last line to prevent whole table scan
这是为了移动
-- old - old_position, new - new_position
UPDATE `position_table` SET
`page_position` = CASE
WHEN (`page_position` = old) THEN
new -- replace new within old
WHEN (`page_position` > old and `page_position` <= new) THEN
`page_position`- 1 -- moving up
WHEN (`page_position` < old and `page_position` >= new) THEN
`page_position`+ 1 -- moving down
ELSE
`page_position` -- otherwise lets keep same value.
END
关于php - 使用php向上/向下移动MySQL行的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19783945/