2013-11-01 27 views
5

Mam tabeli w bazie danych z rejestrów jak następuje:MySQL Aktualizacja kwerendy z wielu wartości

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

moi użytkownicy wybierają przypuszczenie dla każdego meczu i muszę funkcję obliczania wyniku przypuszczenie zależności od wynik meczu: Jeśli zgadniesz, że wynik będzie dobry (1) jeśli jest źle, wynik będzie (2) , jeśli mecz nie został jeszcze zakończony, wynik będzie (0 domyślny) Mam jedenaście możliwości zgadywania (więcej niż jeden może być w tym samym czasie) na przykład: jeśli mam identyfikator dopasowania whit = 125 i mam wszystkie domysły w rong z wyjątkiem 8,11 , więc powinienem zaktualizować pole wyniku dla wszystkich meczów, które mają identyfikator meczu i ich domysły to 8 lub 11 (dam 1 dla tego pola wyniku) i chcę dać (2) dla innych przypuszczenia tego samego meczu

używam tej kwerendy dla wszystkich jedenastu możliwości jak następuje:

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' 

Chcę wiedzieć, czy mogę zrobić tę pracę w jednym zapytaniu, czy nie?

Odpowiedz

4

stosowanie tych dwóch zapytań:

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

a następnie użyj tego:

UPDATE `tahminler` 
     SET result=1 
     WHERE match_id='1640482' 
       AND tahmin IN ('8','11') 
4

Można to zrobić, ale będzie również brzydkie. Użyj CASE() operatora, jak:

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' 
+0

myślę, że to jest bardziej preferowana opcja .. Lubię, kiedy jest tylko jedno oświadczenie zamiast wielu sprawozdań – Schalk

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; 
Powiązane problemy