使用php上移/下移MySQL行的位置

时间:2013-11-05 07:41:08

标签: php html mysql mysqli

我从MySQL表中获取我的页面菜单作为无序列表<ul></ul>按照他们的位置ORDERERED,这是我的MySQL表的截图  

enter image description here

我希望我的查询工作方式类似于我获取page_id_pk = 3的记录,它将其page_position从3设置为2并更新它,所以现在它保存page_position 2.其余页面(行)向下移动增量为1。 我不想只交换两行而是改变它们的位置,即他们的page_id_pk序列将保持不变,只是他们的位置被改变了。

2 个答案:

答案 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