3

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

  1. 项目1
  2. 项目2
  3. 第 3 项
  4. 项目4
  5. 项目5

我正在使用以下 MySQL 查询:

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

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

  1. 项目1
  2. 第5项<<<向上移动
  3. 项目2
  4. 第 3 项
  5. 项目4

但是,如果我希望做相反的事情并向下移动一个项目,则位置需要减少一个(位置 = 位置 - 1),并且 <= 和 >= 符号将交换。因此,我想知道如何在 case 参数中执行此操作(相当于 if{} else if{})

4

2 回答 2

4

如果您需要 if else 您可以使用 MySQLcase语句(链接)。它基本上工作如下:

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

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

于 2012-06-12T01:48:40.843 回答
0

请尝试一下

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}'";
于 2012-06-12T01:49:38.720 回答