Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zliczenie rekordow
Forum PHP.pl > Forum > Bazy danych > MySQL
marcinahk
Witam.
mam tabele
zawodnicy i pola ID , NAZWISKO
wyniki i pola ID_ZAWODNIKA I PUNKTACJA

wiem jak zliczyc i wyswietlic punktacje wszystkich zawodnikow, ale nie wiem jak wyswietlic jednego zawodnika o najwieszej liczbie punktow,

Bardzo porsze o pomoc
Dafidov
Coś takiego powinno zadziałać. Nie sprawdzałem ale powinno wywalić zawodnika z maksymalna ilością punktów.
Sprawdź i daj znać smile.gif
  1. SELECT count(PUNKTACJA) AS sum, MAX(sum) AS max_punkt
  2. FROM wyniki
  3. WHERE wyniki.ID_ZAWODNIKA = zawodnicy.ID


Staraj się usystematyzować nazewnictwo Tabel i pól żeby było wszystko albo dużymi albo małymi literami wówczas nie będziesz miał możliwości się mylić w nazwach winksmiley.jpg
marcinahk
dzieki za odpowiedz
ale wyskakuje mi blad
unknown colum 'sum' in 'field list'

(dopiero zaczynam zabawe z bazami, to tak na marginesie)
spenalzo
TO nie zadziała z prostego powodu - nie wyciągniesz maximum z liczby któej jeszcze nie znasz.
POza tym sum to słowo zastrzeżone w MYSQL i nie powinno sie go używać.


A problem z 1szego posta mo żna rozwiązać tak:
  1. SELECT SUM(PUNKTACJA) AS suma
  2. FROM wyniki
  3. WHERE wyniki.ID_ZAWODNIKA = zawodnicy.ID ORDER BY suma DESC LIMIT 1
LBO
A ja sie zastanawiam po co używać dwóch tabel do tego problemu? Stwórz jedną tabelę, zawodnicy z polami id, nazwisko i punktacja, a to zapytanie wyswietli Ci zawodnika z największą ilościa punktów.
  1. SELECT nazwisko
  2. FROM zawodnicy
  3. ORDER BY punktacja DESC LIMIT 1;


a jeżeli koniecznie musisz zostac przy swojej strukturze oto zapytanie:

  1. SELECT zawodnicy.nazwisko
  2. FROM zawodnicy,
  3. wyniki
  4. WHERE zawodnicy.id = wyniki.id
  5. ORDER BY wyniki.punktacja DESC LIMIT 1
marcinahk
LBO to jest bardziej skomplikowana baza uproscilem ja tylko dla przedstawienia problemu, wiec chyba to nie przejdzie, pozatym mam narzucona baze.

A teraz tak idac za ta mysla:

  1. SELECT SUM(PUNKTACJA) AS suma
  2. FROM wyniki
  3. WHERE wyniki.ID_ZAWODNIKA = zawodnicy.ID ORDER BY suma DESC LIMIT 1


jak zrobiic jezeli kilku zawodnikow bedzie mialo taka sama ilosc punktow ? winksmiley.jpg
spenalzo
Coś.


Może napisz o co ci dokładniej chodzi?tongue.gif
LBO
  1. SELECT zawodnicy.nazwisko, wyniki.punktacja
  2. FROM zawodnicy,
  3. wyniki
  4. WHERE zawodnicy.id = wyniki.id AND wyniki.punktacja = (
  5. SELECT MAX( wyniki.punktacja )
  6. FROM wyniki
  7. )
spenalzo
  1. SELECT zawodnicy.nazwisko, wyniki.punktacja
  2. FROM zawodnicy,
  3. wyniki WHERE zawodnicy.id = wyniki.id HAVING wyniki.punktacja=MAX(wyniki.punktacja)

Może coś takiego?
LBO
~spenalzo
1. Zrobiłem sobie na szybko 2 tabele o strukturze takiej jak podał założyciel tematu i po twoim zapytaniu wyskakuje mi tylko jeden rekord, a mam dwóch zawodników o identycznych (i jednocześnie najwyższych) wynikach. Dlaczego? Czy to błąd tylko u mnie? (Dodam, że moje zagnieżdżone zapytanie work fine)
2. A co jeżeli w tabeli wyniki pole id (wydaje mi się, że nie jest, ale jak to określił autor: to jest bardziej skomplikowana baza uproscilem ja tylko dla przedstawienia problemu, więc mogę się mylić) nie jest unikalne (tzn. że można dodawać kolejne punkty dla zawodnika o tym samym id w kolejnych wierszach)? Jak to rozwiązać?
spenalzo
Ad1. Nie mam w ogole mysql-a na swoim komputerze obecnie wiec nie moge tego sprawdzić...
Ad2. Wtedy group by po id + sum(punkty).
LBO
  1. SELECT zawodnicy.nazwisko, SUM( wyniki.punktacja ) AS punktacja
  2. FROM zawodnicy,
  3. wyniki
  4. WHERE zawodnicy.id = wyniki.id
  5. GROUP BY zawodnicy.nazwisko
  6. HAVING SUM( wyniki.punktacja ) = (
  7. SELECT DISTINCT (
  8. SUM( wyniki.punktacja )
  9. ) AS punktacja
  10. FROM wyniki
  11. GROUP BY wyniki.id
  12. ORDER BY wyniki.punktacja DESC LIMIT 1
  13. )

Zapytanie zwraca zawodników z największą liczbą punktów, uwzględniając problem poruszony przeze mnie 2 posty wyżej.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.