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

Fai*_*sal 4 html php mysql mysqli

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

在此输入图像描述

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

sec*_*tus 12

交换这样的东西

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
Run Code Online (Sandbox Code Playgroud)

这是为了移动

-- 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
Run Code Online (Sandbox Code Playgroud)