5

データベースに次のようなレコードを持つテーブルがあります。

match_id | guess | result
   125   |   1   |   0
   130   |   5   |   0
   233   |   11  |   0
   125   |   2   |   0

私のユーザーは各一致の推測を選択し、一致の結果に応じて推測の結果を計算する関数があります: 推測が正しい場合、結果は (1) になります。間違っている場合、結果は (2 ) 試合がまだ終了していない場合、結果は (0 デフォルト) となります。たとえば、11 通りの推測の可能性があります (複数が同時に正しい可能性があります)。たとえば、id=125 の試合があり、すべて8,11 以外の推測は間違っているので、一致 ID を持つすべての一致の結果フィールドを更新する必要があり、それらの推測は 8 または 11 (この結果フィールドには 1 を指定します) で、もう一方には (2) を指定します。同じ試合の推測

次のような11の可能性すべてにこのクエリを使用します。

UPDATE `tahminler` SET result=1 WHERE match_id='1640482' AND tahmin='8'
UPDATE `tahminler` SET result=1 WHERE match_id='1640482' AND tahmin='11'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='1'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='2'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='3'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='4'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='5'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='6'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='7'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='9'
UPDATE `tahminler` SET result=0 WHERE match_id='1640482' AND tahmin='10'

この仕事を 1 回のクエリで実行できるかどうか知りたいですか?

4

3 に答える 3

5

次の 2 つのクエリを使用します。

UPDATE `tahminler` 
        SET result=0 
        WHERE match_id='1640482' 
              AND tahmin IN ('1','2','3','4','5','6','7','9','10')

そして、これを使用します:

UPDATE `tahminler` 
        SET result=1 
        WHERE match_id='1640482' 
              AND tahmin IN ('8','11')
于 2013-11-01T13:02:01.153 に答える
4

これはできますが、醜いことにもなります。次のようにCASE()演算子を使用します。

UPDATE tahminler
SET
  result=CASE
    WHEN tahmin IN ('1','2','3','4','5','6','7','8','9','10') THEN 0
    WHEN tahmin IN ('8', 11) THEN 1
  END
WHERE
  match_id='1640482'
于 2013-11-01T13:05:05.653 に答える
1
UPDATE `tahminler` SET `result` = CASE WHEN tahmin IN(8,11) THEN 1
                                   WHEN tahmin IN(2,3,4,5,6,7,9,10) THEN 0
                              END
 WHERE match_id = 1640482;
于 2013-11-01T13:07:15.577 に答える