0

イベントへの支援を確認する必要がある人のテーブルがあります。このイベントは定員に限りがあります。同じアトミッククエリ内で確定人数を計算し、確定ステータスを更新したい。

PEOPLE テーブルに id フィールドと Confirmed フィールドがあるとします。

私はこのようなことを試しました:

UPDATE PEOPLE
SET confirmed = 'Y'
WHERE
    id = 'ID_VALUE'
AND
    (
        SELECT amount
        FROM
        (
            SELECT
                COUNT(*) AS amount
            FROM
                PEOPLE AS p
            WHERE
                p.confirmed = 'Y'
        ) AS aux1
    ) < CAPACITY_LIMIT

表の例:

-------------------
| id  | confirmed |
-------------------
| 1   | N         |
-------------------
| 2   | N         |
-------------------
| ... | ...       |
-------------------
| 10  | N         |
-------------------

CAPACITY_LIMIT = 5 で、id = 1 から id = 10 まで順次確認しようとすると、id = 5 まで更新 (confirm = 'Y') を実行したいと考えています。

私は何かが欠けていると確信していますが、それが何であるかわかりません。

前もって感謝します。よろしく。

4

3 に答える 3

1

これを試して:

UPDATE
    PEOPLE AS p1
INNER JOIN
    (SELECT COUNT(*) AS numConfirmed FROM PEOPLE AS p2 WHERE p2.confirmed = 'Y') aux
SET
    p1.confirmed = 'Y'
WHERE
    p1.id = 'ID_VALUE'
    AND aux.numConfirmed < CAPACITY_LIMIT;
于 2013-01-30T12:40:44.350 に答える
0

これを試して

SET @ct := (SELECT
                COUNT(*) AS amount
            FROM
                PEOPLE AS p
            WHERE
                p.confirmed = 'Y');
UPDATE PEOPLE
SET confirmed = 'Y'
WHERE
    id = '1'
AND CAPACITY_LIMIT < @ct
     ;
于 2013-01-30T12:43:42.870 に答える
0

falvarez、同じクエリが問題なく機能するため、データ型と実際の値を含め、入力('ID_VALUE',CAPACITY_LIMIT) が正しいことを確認することをお勧めします。以下は、テスト テーブルに対して実行したクエリです (クエリのスケルトンがあなたのものとまったく同じであることがわかります)。

update t_order set customer ='NewCustomerName' where id = 124 and (select amount from (select count(*) as amount from t_order where customer is null not null) as total) < 10

于 2013-01-30T12:52:19.353 に答える