Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]SELECT, UNION i SUM
aros
post 30.01.2013, 04:18:58
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 21.03.2008

Ostrzeżenie: (0%)
-----


Staram się skonstruować zapytanie SQL, jeśli się da, za jednym razem. Nie bardzo mam koncepcję. Problem jest następujący:

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:

  1. SELECT gospodarz AS id FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59"
  2. UNION
  3. 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ń:
  1. SELECT SUM( ra1 ) FROM mecze WHERE gospodarz = id AND dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59"
  2. 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:

  1. SELECT id, imie,
  2. (
  3. (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)
  4. +
  5. (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)
  6. ) AS suma
  7.  
  8. FROM
  9.  
  10. (
  11. SELECT gospodarz AS id FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59"
  12. UNION
  13. SELECT gosc AS id FROM mecze WHERE dzien >= "2013-01-01 00:00:00" AND dzien <= "2013-01-01 23:59:59"
  14. ) AS id,
  15.  
  16. users WHERE id = user
  17.  
  18. ORDER BY suma DESC


Chyba można zamknąć smile.gif

Ten post edytował aros 30.01.2013, 04:28:19
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:10