3

ドロップダウン ボックス (PHP 変数 $position に名前が割り当てられている) を送信して、1 つのアイテムの位置を更新するときに、位置に基づいてリストを並べ替えようとしています。以下に例を示します。位置はリスト内の順序で表されます。

  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. アイテム1
  2. Item5 <<< 上に移動
  3. アイテム2
  4. アイテム3
  5. アイテム4

ただし、逆にアイテムを下に移動したい場合は、位置を 1 つ減らす必要があり (位置 = 位置 - 1)、<= と >= 記号が入れ替わります。したがって、ケース引数でこれを行う方法を考えています (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 に答える