我正在尝试根据一个下拉框的提交来更新一个项目的位置,并基于它们在更新后的位置重新排序列表(该下拉框有一个名称分配给PHP变量$position)。以下是一个示例,其中位置由列表中的顺序表示:
- 项目1
- 项目2
- 项目3
- 项目4
- 项目5
我正在使用以下MySQL查询:
UPDATE subjects SET
position = position + 1
WHERE position <= position AND position >= {$position};
如果我把Item5移动到位置2,这个查询将会把从位置2到4的所有东西向下推一个位置,结果如下:
1. Item1 2. Item5 <<< moved up 3. Item2 4. Item3 5. Item4
但是,如果我想要相反的效果,即向下移动一个项目,则需要将位置减少一(position = position - 1),并且<=和>=符号会交换位置。因此,我想知道如何在case语句中做到这一点(相当于if{} else if{})。
position = (CASE WHEN position < {$position} THEN position+1 WHEN position > {$position} THEN position-1 else position END CASE) WHERE position <= position AND position >= {$position} AND menu_type = '{$menu_type}'"; - Justin