4

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

在此处输入图像描述

我希望我的查询以某种方式工作,就像我获取 page_id_pk=3 的记录时一样,它将其 page_position 从 3 设置为 2 并更新它,因此现在它保持 page_position 2。其余的页面(行)向下移动一个增量之一。我不想只交换两行,而是改变它们的位置,即它们的 page_id_pk 序列将保持不变,只是它们的位置发生了变化。

4

2 回答 2

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

这是为了搬家

-- 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
于 2013-11-05T07:54:43.843 回答
0

如果将 page_position 2 更改为 1 会发生什么?如果您可以使用 page_position 编号交换,那么就这样做......因此选择 page_position 3 到 2 然后将当前 2 设置为 3 这样您就可以一个一个地移动它们。如果 5 变成 6 那么旧的 6 变成 5

于 2013-11-05T07:50:56.720 回答