MySQL Case语句(如果等效,则为if)

时间:2012-06-12 01:37:24

标签: mysql position case

我试图通过提交一个下拉框(其名称分配给PHP变量$ position)更新一个项目的位置,根据他们的位置重新排序列表。这是一个例子,其中的位置由列表中的顺序表示:

  1. 项目1
  2. 项目2
  3. 项目3
  4. 项目4
  5. 项目5
  6. 我正在使用以下MySQL查询:

    UPDATE subjects SET 
    position = position + 1 
    WHERE position <= position AND position >= {$position};
    

    如果我要将Item5移动到位置2,则此查询会将位置2到4的所有内容向下推动一个位置,从而导致:

    1. 项目1
    2. Item5 &lt;&lt;&lt;向上移动
    3. 项目2
    4. 项目3
    5. 项目4
    6. 但是,如果我希望相反并向下移动一个项目,则该位置需要减少一个(位置=位置-1),并且&lt; =和&gt; =符号将交换。因此,我想知道如何在案例论证中做到这一点(相当于if {} else if {})

2 个答案:

答案 0 :(得分:4)

如果您需要if else,可以使用MySQL case语句(link)。它基本上如下工作:

CASE case_value
  WHEN when_value THEN statement_list
  [WHEN when_value THEN statement_list] ...
  [ELSE statement_list]
END CASE

您可以根据需要嵌套它们。

答案 1 :(得分:0)

Plz试试吧

update subjects set position=(CASE
    WHEN search_condition THEN 
        position+1
    WHEN search_condition THEN 
    postion-1
    else
       postion
END CASE) WHERE position <= position AND position >= {$position} AND menu_type = '{$menu_type}'";