Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zliczenie rekordow
marcinahk
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.04.2006

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


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

Ten post edytował marcinahk 22.04.2006, 19:54:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Dafidov
post
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 6.07.2005
Skąd: Śląsk Bytom

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


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
Go to the top of the page
+Quote Post
marcinahk
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.04.2006

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


dzieki za odpowiedz
ale wyskakuje mi blad
unknown colum 'sum' in 'field list'

(dopiero zaczynam zabawe z bazami, to tak na marginesie)
Go to the top of the page
+Quote Post
spenalzo
post
Post #4





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

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


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


Ten post edytował spenalzo 22.04.2006, 21:33:02


--------------------

Go to the top of the page
+Quote Post
LBO
post
Post #5





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


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


Ten post edytował LBO 22.04.2006, 22:00:10
Go to the top of the page
+Quote Post
marcinahk
post
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.04.2006

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


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
Go to the top of the page
+Quote Post
spenalzo
post
Post #7





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

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


Coś.


Może napisz o co ci dokładniej chodzi?tongue.gif


--------------------

Go to the top of the page
+Quote Post
LBO
post
Post #8





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


  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. )
Go to the top of the page
+Quote Post
spenalzo
post
Post #9





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

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


  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?


--------------------

Go to the top of the page
+Quote Post
LBO
post
Post #10





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


~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ć?

Ten post edytował LBO 22.04.2006, 22:56:10
Go to the top of the page
+Quote Post
spenalzo
post
Post #11





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

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


Ad1. Nie mam w ogole mysql-a na swoim komputerze obecnie wiec nie moge tego sprawdzić...
Ad2. Wtedy group by po id + sum(punkty).

Ten post edytował spenalzo 22.04.2006, 23:00:08


--------------------

Go to the top of the page
+Quote Post
LBO
post
Post #12





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


  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.

Ten post edytował LBO 22.04.2006, 23:55:22
Go to the top of the page
+Quote Post

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 Aktualny czas: 19.08.2025 - 23:26