Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Sprawdzenie najwyższego wyniku
Watt
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
phpion
post
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.
Go to the top of the page
+Quote Post
Watt
post
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
Go to the top of the page
+Quote Post
phpion
post
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.
Go to the top of the page
+Quote Post
Watt
post
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.
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Sumujesz punkty wszystkich użytkowników, sortujesz wynik po tej sumie malejąco i wybierasz pierwszy rekord. Tyle. W uproszczeniu tak to ma wyglądać:
  1. SELECT ... SUM(punkty) ... GROUP BY id_uzytkownika ORDER BY SUM(punkty) DESC LIMIT 1
Go to the top of the page
+Quote Post
Watt
post
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ą ?
Go to the top of the page
+Quote Post
porady-it.pl
post
Post #8





Grupa: Zarejestrowani
Postów: 89
Pomógł: 20
Dołączył: 13.05.2007
Skąd: Warszawa

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


Blisko:

  1. SELECT id_u FROM test GROUP BY id_u ORDER BY SUM(punkty) DESC LIMIT 1


PS.

Nie musisz umieszczać tego w pętli bo i tak masz tylko jeden rekord winksmiley.jpg

  1. <?php
  2. require('config.php');
  3.  
  4. $wynik = mysql_fetch_assoc(mysql_query("SELECT id_u FROM test GROUP BY id_u ORDER BY SUM(punkty) DESC LIMIT 1  "));
  5.  
  6.  
  7. echo $wynik["id_u"]." </br>";
  8. ?>


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
Go to the top of the page
+Quote Post
Watt
post
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ć ;/
Go to the top of the page
+Quote Post
phpion
post
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:
  1. <?php
  2. $wynik = mysql_query("SELECT id_u, SUM(punkty) AS suma_punktow FROM test GROUP BY id_u ORDER BY SUM(punkty) DESC LIMIT 1  ");
  3.  
  4. $r = mysql_fetch_array($wynik, MYSQL_ASSOC);
  5.  
  6.  
  7. echo $r["id_u"]." ".$r["suma_punktow"];
  8. ?>
Go to the top of the page
+Quote Post
Watt
post
Post #11





Grupa: Zarejestrowani
Postów: 372
Pomógł: 1
Dołączył: 13.06.2008

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


Dziękuję Ci za pomoc!
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: 20.08.2025 - 04:53