2012-06-12 54 views
3

我試圖重新排序後經提交下拉框的更新一個項目的位置(其中有分配給一個名字根據他們的位置的列表PHP變量$ position)。下面是一個例子,與它們在列表中順序代表的位置:MySQL的案例說明(如果否則,如果換算)

  1. 項目1
  2. 項目2
  3. 項目3
  4. 項目4
  5. 項目5

我使用下面的MySQL查詢:

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

如果我是移動項目5至2位置該查詢將向下移動一個位置,從位置2推一切4,導致:

  1. 項目1
  2. 項目5 < < <上升
  3. 項目2
  4. 項目3
  5. 項目4

但是,如果我想向下做相反的事情和移動的項目,位置就需要成爲一個都不能少(位置=位置 - 1),以及< =和> =跡象會掉。因此,我想知道如何在case參數中執行此操作(相當於if {else else if {})

回答

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 

而且你可以根據需要嵌套它們。

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}'"; 
+0

什麼是 「search_condition」 是什麼意思?由於 – Justin

+0

無需諷刺。目前還沒有完全清楚它應該在什麼格式;我假定這將是:「位置<$位置」,然後在「位置> $位置」 – Justin

+0

下面的查詢提供了一個錯誤: \t \t \t $查詢=「更新的被攝對象 \t \t \t \t \t位置= (例如當位置<{$位置}則位置+ 1當位置> {$位置}則位置-1否則位置END CASE) \t \t \t \t \t WHERE position <= position AND position> = {$ position} AND menu_type ='{$ menu_type}'「; – Justin