Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie + łaczenie, Problem z datą???
Aztech
post
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


Mam 2 tabele w bazie:
tournaments gdzie znajdują sie dane o turnieju, w tym:
(*) TurnID - numer turnieju (pierwszy, drugi itp)
(*) Data - czyli kiedy sie odbyll
listrank zawiera informacje na temat zdobyczy punktowych oraz ilosci gier danego gracza w bazie oraz w jakim to turnieju uzyskal tą zdobycz:
Oto pelna specyfikacja:
  1. CREATE TABLE `listrank` (
  2. `TurnID` int(10) UNSIGNED NOT NULL DEFAULT '0',
  3. `PID` int(11) NOT NULL DEFAULT '0',
  4. `Skalpy` float NOT NULL DEFAULT '0',
  5. `Gry` int(11) NOT NULL DEFAULT '0',
  6. KEY `TID` (`TurnID`),
  7. KEY `PID` (`PID`)
  8. ) TYPE=MyISAM;


TurnId - wiadomo - numer turnieju
PID - ID osoby ktora wystapila w danym turnieju
Skalpy - zdobycz punktowa
Gry - ilosc gier w jakich gracz wystapil w danym turnieju
Przykladowe dane w tabeli wygladaja tak:
Kod
TurnID PID Skalpy Gry
1 1 500 4
1 2 420 4
1 3 500 5
2 1 200 4
2 2 300 3
2 4 150 1
3 2 100 1
3 4 500 4
3 3 425 3
52 1 500 3

np wiersz 1 1 500 4 oznacza:
w turnieju 1 gracz o ID=1 zdobyl 500pkt w 4 grach.
Zapytanie jakie należy zadać ma następującą postać:
(*) wyszukaj zdobycze punktowe (= skalpy) wszystkich graczy ktorzy zagrali w przeciagu ostatnich 2 lat i oblicz ranking(UWAGA ranking = suma zdobytych punktow/ilosc gier)
(*) UWAGA: ranking powinien byc liczony tylko za okres 2 lat jesli jakis gracz zdobyl wczesniej punkty powinny one zostac pominiete i niezliczone!
Moje zapytanie ma postac:
  1. SELECT PID, SUM( Skalpy ) , SUM( Gry ) , tournaments.DATA
  2. FROM listrank LEFT JOIN tournaments ON tournaments.TurnID = listrank.TurnID AND tournaments.DATA
  3. BETWEEN curdate() AND curdate() - interval 2 year GROUP BY PID
  4. HAVING tournaments.DATA IS NOT NULL;

ale niestety nie do konca zwraca to na czym mi zalezy!

#EDIT

A rozwiązanie wygląda tak (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. SELECT PID, Name, SUM( Skalpy ) , SUM( Gry ), SUM( Skalpy ) / SUM( Gry ) AS Rank, tournaments.DATA
  2. FROM listrank LEFT JOIN tournaments ON tournaments.TurnID = listrank.TurnID AND tournaments.DATA
  3. BETWEEN curdate( ) - INTERVAL 2 year AND curdate( )
  4. WHERE tournaments.DATA IS NOT NULL
  5. GROUP BY PID
  6. ORDER BY Rank DESC


Ten post edytował Aztech 16.10.2004, 10:47:58
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 20:37