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

标签 php html mysql mysqli

我正在从 MySQL 表中以无序列表的形式获取我的页面菜单 <ul></ul>按他们的位置排序,这是我的 MySQL 表的屏幕截图

enter image description here

我希望查询的工作方式类似于获取 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/

相关文章:

php - 使用日期函数搜索内容

html - 水平滚动 Bootstrap 4 导航选项卡

css - Netbeans 忽略 HTML5 应用程序中的 CSS 样式

php - 无法使用用户名将数据输入到评论框中

php - 是否可以在 zend 框架中使用 mysql 函数(不是内置的)?

php - Laravel/Heroku,没有这样的文件或目录用于 session

php - 如何使用(mod rewrite powered)漂亮的 URL 读取 $_GET 变量

php - 为什么 mysqli 仍然转义引号?

html - CSS - Flexbox - 文本适合时的内联列表

mysql - 使用 mySQL 列出两个连接表中的用户