1

次のようなテーブルの例を考えます。

CREATE TABLE TESTING_Order(
    Order INT, 
    Name VARCHAR(5)
)

INSERT INTO TESTING_Order 
VALUES
    (0, 'Zero'),
    (1, 'One'),
    (2, 'Two'),
    (3, 'Three'),
    (4, 'Four'),
    (5, 'Five'),
    (6, 'Six'),
    (7, 'Seven')

たとえば、最初のプレーヤーが各ターンで「左」に移動するゲームのターン順序を表示するために、一種の「スタック」を実装する方法を知りたいです。これは、2つの更新ステートメントを使用して実行できます。

UPDATE TESTING_Order
SET Order = Order + 1

UPDATE TESTING_Order 
SET Order = (SELECT Min(Order) -1 FROM TESTING_Order)
WHERE Order = (SELECT MAX(Order) FROM TESTING_Order)

これを行うためのよりクリーンでより適切な方法があるかどうか、特に、単一のUPDATEステートメントを使用して他の方法を行うことができるかどうか疑問に思いました。

言い換えれば、私が求めているのは、すべてのポップをプッシュするLIFOスタックのより良い実装だと思います。

4

1 に答える 1

2

ここに答えがあるように:

リストを循環するために、私は使用することにしました:

UPDATE TESTING_Order
SET nOrder = 
    Case 
        WHEN (nOrder - 1) < 0 THEN (SELECT Count(*) FROM TESTING_Order) - 1
        WHEN (nOrder - 1) >= 0 THEN (nOrder - 1) % (SELECT MAX(nOrder) + 1 FROM TESTING_Order)
    END

これにより、リストを正しい方法で移動でき(私の答えはおそらくそうではなかったと思います)、1つのステートメントで要求したことを実行できるという利点があります。私を正しい方向に向けてくれてありがとう、ワイズガイ

于 2013-02-02T21:27:17.910 に答える