Mam dwie tabele: mecze i users, w niej mecze zawodników (pola gospodarz, gość - po id usera) i wyniki punktowe (pola ra1 i ra2) w danych datach oraz nicki zawodników.
Chciałbym wyciągnąć zapytaniem posortowaną tablicę użytkowników, którzy wybranego przeze mnie dnia grali choć jeden mecz, sortując ją względem największej sumy zdobytych punktów danego dnia (a więc suma: gospodarz z pola ra1 i gosc z pola ra2)
Koncepcja na zapytania to z grubsza złożenie tablicy graczy (bez powtórzeń), którzy danego (wybranego) dnia grali przynajmniej jeden mecz, choćby tak:
SELECT gospodarz AS id FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59" UNION SELECT gosc AS id FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59"
Sumę zdobytych punktów danego dnia złapię dodając wynik dwóch zapytań:
SELECT SUM( ra1 ) FROM mecze WHERE gospodarz = id AND dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59" SELECT SUM( ra2 ) FROM mecze WHERE gosc = id AND dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59"
Ma ktoś ochotę pomóc, jak to złożyć w jedno zapytanie w MYSQL, które wypluje mi TOP graczy dnia?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Jakby ktoś potrzebował. Złożyłem i działa:
SELECT id, imie, ( (SELECT COALESCE(SUM( ra1 ),0) FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59" AND gospodarz = id) + (SELECT COALESCE(SUM( ra2 ),0) FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59" AND gosc = id) ) AS suma FROM ( SELECT gospodarz AS id FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59" UNION SELECT gosc AS id FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59" ) AS id, users WHERE id = user ORDER BY suma DESC
Chyba można zamknąć
