Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie posortowane wg zsumowanych pol
Forum PHP.pl > Forum > Bazy danych > MySQL
MalyKazio
Witam.

Probuję stworzyć coś w rodzaju rankingu psów.
Mam tabele wyglądającą w skrócie tak:
Ranking
[id] [wystawa] [pies] [punkty]

W takiej tabelce sa rekordy, każdy pies ma ich sporo bo za każdą wystawę przybywa jeden.
Chodzi mi o takie cudo: Jak zrobić aby wyświetlić psy w wg zsumowanej wartosci pola punkty (malejąco) dla kazdego psa.
Bardziej obrazowo:

Mamy dwa psy, pies 1 i 2. Psy te braly udzial w dwoch wystawach, pies 1 z pierwszej ma 3 pkt a z drugiej 5 a pies drugi z pierwszej 5 a z drugiej 8. Jak zrobić by wyświetlić je tak:
nazwa psa 2 - 13 punktow
nazwa psa 1 - 8 punktow
Chodzi mi o metodę a nie o gotowy kod... kod jakoś sam napiszę. Doradźcie tylko proszę jakie środki wykorzystać, ewentualnie jakie komendy bo sam sobie poradzić nie mogę.
Fipaj
O ile dobrze zrozumiałem, wystarczy po prostu:
  1. SELECT *
  2. FROM psy ORDER BY punkty

o to chodziło?
MalyKazio
Nie wystarczy bo kazdy kazda wystawa, z udzialem danego psa to osobny wiersz i tym samym za kazda wystawe sa osobne punkty. Chodzi o to zeby podsumowac punkty z kilku wierszy i sortowac wg podsumowanej juz liczby punktow.
Fipaj
Aha winksmiley.jpg

No to potem ładujesz wyniku do tablicy, jeśli już taki pies wystąpił - dodajesz do $psy['pies']['punkty'] wynik; jeśli nie - tworzysz $psy[$pies]...
hesus
Bez sensu.
Zastosuj COUNT(punkty)
i konstrukcję GROUP BY
Synaps
  1. SELECT pies,sum(punkty)
  2. FROM psy GROUP BY pies
  3. ORDER BY 2 DESC
MalyKazio
No tak, fajne zapytanie ale mam pytanie: czy nie zsumuje ono wszystkich wartosci pola punkty, dla wszystkich wierszy (czyli dla wszystkich psow)?
Chodzi mi o to:
Jest tak:
pies1 20pkt
pies2 30 pkt
pies1 10 pkt
pies3 40 pkt
pies1 40pkt
i zeby wybrac wszystkie psy czyli pies1, pies2 i pies3 i jednoczesnie zsumowac wartosci punktow, zeby wyszlo takie cos:
pies1 70pkt
pies3 40pkt
pies2 30pkt, czyli posortowac wyniki malejaco?

A moze sie myle i zapytanie podane przez Synapsa wlasnie tak zadziala, ze wybiera psa i liczy punkty wszedzie gdzie jest ten pies?
FiDO
Cytat(MalyKazio @ 2005-12-06 10:51:25)
A moze sie myle i zapytanie podane przez Synapsa wlasnie tak zadziala, ze wybiera psa i liczy punkty wszedzie gdzie jest ten pies?

A moze wykazalbys odrobine inicjatywy i sprawdzil to co podaja Ci ludzie zanim cokolwiek napiszesz ?
MalyKazio
Dziękuje za pomoc, wszystko działa jak należy. To właśnie jest to o co mi chodziło. Jednocześnie przepraszam za dopytywanie się bez sprawdzenia. To nie wynik lenistwa tylko po prostu braku regularnego dostępu do komputera gdzie mógłbym to wszystko przestestować. Dlatego tak cenne są dla mnie trafne podpowiedzi.
Jeszcze raz dziękuję.

Edycja:
Kod wyswietla mi wszystko jak należy. Rankig jest stworzony w porządku. Natrafiłem tylko na jeden problem. Jako, że to ma być ranking więc miejsca są ponumerowane. Zdarza się tak, że niektóre psiaki mają tyle samo punktów, więc powinny mieć tą samą lokatę a nie kolejną. Da się to jakoś zrobić? Kod wygląda tak:
  1. <?php
  2.  
  3. $link = mysql_connect("localhost", "root", "") or die ("Nie mo+na siŕ poŚŚczyŠ");
  4. mysql_select_db ("swieczkos") or die ("Nie mozna wybraŠ bazy danych");
  5.  
  6. $i=1;
  7. $query = "SELECT pies,sum(punkty) as punkty FROM ranking GROUP BY pies ORDER BY punkty DESC";
  8. $wynik = mysql_query($query);
  9. while ($row = mysql_fetch_assoc($wynik)) {
  10. echo "$i $row[pies] $row[punkty]<br>";
  11. $i++;
  12. }
  13. mysql_close($link);
  14.  
  15. ?>
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.