1

このテーブルがあるとしましょう。

 ID         Name       Order
======== ========  =========
 1           d          1
 2           g          2
 3           b          3
 4           f          4
 5           a          5

これで、UI ユーザーからドラッグ ドロップで順序を変更できます。たとえば、アイテム d をアイテム a の場所に移動できます。次に、私のテーブルは次のようになります。

 ID         Name       Order
======== ========  =========
 2           g          1
 3           b          2
 4           f          3
 1           d          4
 5           a          5

誰でもSQLを教えてもらえますか? ID、OldOrder、NewOrder の入力があります。

4

1 に答える 1

6

IDパラメータさえ必要ありません。

UPDATE
  yourTable
SET
  Order = (CASE WHEN     Order = @oldOrder THEN @newOrder
                WHEN @newOrder > @oldOrder THEN Order - 1
                                           ELSE Order + 1 END)
WHERE
     Order BETWEEN @oldOrder AND @newOrder
  OR Order BETWEEN @newOrder AND @oldOrder
  • 元の位置と新しい位置の上または下にあるものは、変更する必要はありません。
  • それ以外はすべて 1 つ上または下に移動します。
  • 元のアイテムを除いて、新しい位置に移動します。
于 2012-11-20T13:42:29.693 に答える