我从MySQL表中获取我的页面菜单作为无序列表<ul></ul>
按照他们的位置ORDERERED,这是我的MySQL表的截图
我希望我的查询工作方式类似于我获取page_id_pk = 3的记录,它将其page_position从3设置为2并更新它,所以现在它保存page_position 2.其余页面(行)向下移动增量为1。 我不想只交换两行而是改变它们的位置,即他们的page_id_pk序列将保持不变,只是他们的位置被改变了。
答案 0 :(得分:11)
交换
这样的东西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
答案 1 :(得分:0)
如果将page_position 2更改为1,会发生什么?如果你可以使用page_position数字交换然后这样做...所以选择page_position 3到2然后使当前2到3 这样你就可以一个接一个地移动它们。 如果5变为6那么老6变为5