0

次のselectステートメントがあるとします。これは、のdog=0後の最初の出現を返しinsert_timeます。

SELECT mammal, id
FROM mytable
WHERE dog = 0 
  AND insert_time > "2012-02-09 00:00:00"
LIMIT 0, 1

mammal = 1次に、その行を更新して、哺乳類がまだ更新されていない場合にのみ更新したいと考えてい=1ます。これを行う方法を現在知っている唯一の方法は、PHP で配列をフェッチし、哺乳類要素をチェックしてからUPDATE、行に対して別の mysql ステートメントを実行することです。

UPDATE mytable
SET mammal = 1
WHERE id = selectidfromabove

おそらくSELECT上記のステートメントをステートメントでラップして、これをすべて1つのmysqlステートメントで実行できる方法はありUPDATEますか?

4

1 に答える 1

3

あなたはあなたが提案したことを正確に行うことができます:

UPDATE mytable
SET mammal=1
WHERE id IN (
    SELECT id
    FROM mytable
    WHERE dog = 0 
        AND insert_time > "2012-02-09 00:00:00"
    LIMIT 0, 1
);

注:元の選択クエリは、選択IDのみに変更されました。

于 2012-12-05T02:09:12.773 に答える