![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pytanie jak sprawdzić najwyższy wynik w dość nietypowej sytuacji. Mam w bazie kolumnę USER_ID oraz PUNKT. Za napisanie każdego artykułu user dostaje dodatkowy punkt, w mysql mam z 300 wierszy i spośród nich chciałbym znaleźć osobę, która ma najwięcej punktów za artykuły. I tu jest problem bo gdy napiszesz 10 artów to w bazie pojawia się 10 wierszy z Twoim USER_ID. Jak sprawdzić osobę z największym wynikiem i najwyższy wynik (jego wynik)? (Dodam, że niektóre arty są inaczej punktowane niż inne - jakby to miało w czymś pomóc) Pozdrawiam! Ten post edytował Watt 22.04.2009, 16:27:16 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Poczytaj o funkcjach agregujących w MySQL, a w szczególności o SUM(). Ponadto musisz użyć grupowania więc poczytaj również o GROUP BY. Nic więcej ci do szczęścia nie jest potrzebne.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, tylko głownie mam problem z tym, żeby porównać jednego usera z drugim. Chodzi o to, że ID nie są po kolei
Kod $wynik = mysql_query("SELECT id_u, punkty FROM test"); while($r = mysql_fetch_array($wynik, MYSQL_ASSOC)){ echo $r["id_u"]." </br>"; $z[$r["id_u"]] = $z[$r["id_u"]] + $r["punkty"]; if($z[$r["id_u"]] > $z[$r["id_u"]- 1]) $najwyzsza = $r["id_u"]; } echo "Ten user to".$najwyzsza; Nie mogę zrobic id_u - 1 bo id nie sa po kolei ; / Ten post edytował Watt 22.04.2009, 16:34:05 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Pozwól, że się powtórzę: SUM() + GROUP BY.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dobrze, ale ja nie rozumiem zastosowania w moim przypadku. Pogrupuje je, zsumuje i co? Mam problem z pobraniem ID gościa, który ma największą sumę - chyba, że źle zrozumiałem komendę mysql SUM ?
Wybaczcie, że tak spamuje, ale co mam zrobić, gdy nie widzę związku - za słabo nam php i mysql. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czyli to by wyglądało tak:
Kod $wynik = mysql_query("SELECT id_u FROM test SUM(punkty) GROUP BY id_uzytkownika ORDER BY SUM(punkty) DESC LIMIT 1 "); while($r = mysql_fetch_array($wynik, MYSQL_ASSOC)){ echo $r["id_u"]." </br>"; } I pierwszym wynikiem $r["id_u"] będzie id usera z najwyższą ilością ? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 20 Dołączył: 13.05.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Blisko:
PS. Nie musisz umieszczać tego w pętli bo i tak masz tylko jeden rekord ![]()
Ten post edytował porady-it.pl 22.04.2009, 18:26:51 -------------------- Kurs Video PHP i MySQL, porady-it.pl - gotowe rozwiązania dla webmasterów
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Okej, a gdy chcę pokazać punkty?
Kod $wynik = mysql_query("SELECT id_u, SUM(punkty) FROM test GROUP BY id_u ORDER BY SUM(punkty) DESC LIMIT 1 "); $r = mysql_fetch_array($wynik, MYSQL_ASSOC); echo $r["id_u"]." ".$r["punkty"]; Tak jakoś nie chce działać ;/ |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Ehhh... dodaj alias do SUM(punkty) czyli:
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję Ci za pomoc!
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 04:53 |