4

MySQLテーブルからページのメニューを順序付けられていないリストとして取得しています<ul></ul>。位置によってORDEREREDされています。MySQLテーブルのスクリーンショットは次のとおりです

ここに画像の説明を入力

page_id_pk=3 のレコードをフェッチするときのようにクエリを機能させたいのですが、page_position を 3 から 2 に設定して更新し、page_position 2 を保持するようにします。残りのページ (行) は増分で下に移動します。ひとつの。2 つの行を交換するだけではなく、その位置を変更したい、つまり、page_id_pk シーケンスは同じままで、位置が変更されるだけです。

4

2 に答える 2

12

交換用はこんな感じ

UPDATE `position_table` SET `page_position` = CASE  
                        WHEN (`page_position`=1)  THEN 2   
                        WHEN (`page_position`=2)  THEN 1
                        END 
WHERE `page_position` in (1, 2) -- last line to prevent whole table scan

そして、これは移動用です

-- old - old_position, new - new_position

UPDATE `position_table` SET
    `page_position` = CASE
        WHEN (`page_position` = old) THEN 
            new                                -- replace new within old
        WHEN (`page_position` > old and `page_position` <= new) THEN 
            `page_position`- 1                 -- moving up
        WHEN (`page_position` < old and `page_position` >= new) THEN 
            `page_position`+ 1                 -- moving down
        ELSE 
            `page_position`                    -- otherwise lets keep same value.
      END
于 2013-11-05T07:54:43.843 に答える
0

page_position 2 を 1 に変更するとどうなりますか? page_position 番号のスワップを使用できる場合は、そのようにします...つまり、page_position 3 から 2 を選択し、現在の 2 から 3 にします。この方法で、それらを 1 つずつ移動できます。5 が 6 になると、古い 6 は 5 になります

于 2013-11-05T07:50:56.720 に答える