Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane zapytanie
Kwiatol
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 28.01.2006

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


Jako, że to mój pierwszy post to na początek się przywitam. Witam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Mam problem, z którym od dłuższego czasu nie mogę sobie poradzić mimo przeglądania forum oraz list dyskusyjnych.

  1. SELECT mecz_statystyki_zaw.zawodnik, zaw.imie, zaw.nazwisko, AVG(mecz_statystyki_zaw.pkt) AS pkt
  2. FROM mecz_statystyki_zaw
  3. INNER JOIN zaw ON mecz_statystyki_zaw.zawodnik=zaw.zawodnik WHERE gral=1 AND rozgrywki_id=1 AND sezon_id=2005 ORDER BY mecz_statystyki_zaw.pkt DESC LIMIT 50


Jak zapewne domyślacie się z kodu, mam bazę zawodników i chcę wyciągnąc listę graczy z najlepszymi średnimi. Zapytanie chodzi "tak sobie" jeżeli użyje klauzuli GROUP BY, ale nie mogę go używać bo nie o takie sortowanie mi chodzi, po drugie, baza wyciąga nie najlepze średnie a po prostu najlepsze jednorazowe wyniki punktowe danego zawodnika.

Chodzi o to by podliczyć wszystkie punkty danego zawodnika z bazy i potem wyciągnąć z tego średnią. Moje zapytanie nie działa w ten sposób po prostu nie umiem robić sumy punktów dla danego gracza, oczywiście można zastosować np. WHERE zawodnik=1 itd., ale wtedy się wyśwetli tylko jeden zawodnik, a ja chcę by było ich więcej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Mam nadzieję, że moje tłumaczenie nie jest zbyt zawiłe. Będę bardzo wdzięczny za wskazówki bo mi już pomysły się skończyły.

Ten post edytował Kwiatol 28.01.2006, 14:36:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
spenalzo
post
Post #2





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Jest błąd przy GROUP BY, zwróć uwagę na kolorowanie składni:

Masz:
  1. GROUP BY 'nazwisko' ORDER BY 'avg'


powinno być
  1. GROUP BY nazwisko ORDER BY avg


ponieważ są to pola , a nie wartości tekstowe.



Drugi błąd:
  1. SELECT mecz_id, imie, nazwisko, zaw.nklub, zespol, zaw.zawodnik,

To również nie jest źle, ale (dla porządku) powinienieś albo używać aliasów albo pełnych nazw tabel rpzy kolumnach. Teraz może i działa, ale jak kiedyś dodasz jedno pole o tej samej nazwie , to wszystko sie pomiesza i nie dojdziesz gdzie jest błąd (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


Cytat
Teraz problem jest taki jak w jednym zapytaniu (czy da się w ogóle) pokazywać tych zawodników, którzy rozegrali przynajmniej 10 meczów. Najpierw trzeba policzycz wszystkie mecze z bazy, a później zrobić mecz_id>10. Jeśli ktoś wie jak to zrobić w jednym zapytaniu będę wdzięczny za odpowiedź.

Nie wiem dokładnie o co chodzi (nie napisałeś czy jest to kolumna, wynik funkcji czy coś innego) ale są dwa wyjsćia:

  1. WHERE (....) HAVING mecz_id>10 (...) GROUP...


albo dodać odpowiedni warunek w WHERE.


Btw, ważna uwaga - pamiętaj o używaniu mysql_escape_string i/albo intval, jeżeli musisz przekazywać parametry między stronami.

Ten post edytował spenalzo 1.02.2006, 11:44:45
Go to the top of the page
+Quote Post

Posty w temacie


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: 13.10.2025 - 15:07