Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 10 największych rekordów mysql
Forum PHP.pl > Forum > PHP
szczawik
Witam, w jaki sposób można wyciągnąć z bazy MySQL 10 rekordów, które mają największą wartość w polu np. liczba?
konrados
Select max
http://www.plus2net.com/sql_tutorial/sql_max.php
markonix
Kod
ORDER BY `nazwa_kolumny` DESC LIMIT 10
modern-web
Źle... Gdy nie będzie wcale rekordów spełniających dany warunek/i wywali błąd (stosując metodę kolegi wyżej).

Lepiej zrób tak smile.gif

  1. $query = mysql_query("SELECT * FROM `xxx` WHERE `x` = `x` ORDER BY `x` DESC LIMIT 0,10");


Pozdrawiam smile.gif
Crozin
@modern-web: jaki niby błąd miałoby wywalić? Poza tym `x = x` zostanie usunięte pewnie przez optymalizator jeżeli kolumna X nie może być NULL. Co więcej jeżeli może, to dojdzie do błędów w zwracanych rekordach ponieważ NULL nie jest równy NULLowi czyli rekord nie zostanie zwrócony.
modern-web
Co do błędu; masz rację.
Ale to było jedynie przykładowe zapytanie, więc nie wszystko co jest w nim zawarte musi być użyte w tym wypadku.
szczawik
Nie wychodzi mi... nie wyświetla od największego rekordu do najmniejszego, tylko pomieszanie...
gargamel
Wklej zapytanie jakiego używasz
modern-web
ORDER BY RAND() byłoby losowe...
ORDER BY x ASC - rosnąco
ORDER BY x DESC - malejąco

Wydaje mi się, że Twój błąd leży w umiejscowieniu '/`/" w zapytaniu smile.gif
Pokaż go, a rozwiążemy problem.
szczawik
  1. <?php
  2. $polaczenie = mysql_connect('x', 'x', 'x') or die("Brak połączenia: " . mysql_error());
  3. $baza = mysql_select_db('x',$polaczenie) or exit("Nie wybrano bazy, błąd: " . mysql_error());
  4. $zapytanie = "SELECT * FROM czatgg_base ORDER BY wyraz DESC LIMIT 0,10";
  5. $wynik = mysql_query($zapytanie,$polaczenie) or die(mysql_error());
  6. while ($rekord = mysql_fetch_assoc($wynik)) {
  7. echo $rekord['name']. " [" . $rekord['wyraz'] . "]<br />";
  8. }
  9. ?>
gargamel
Spróbuj
  1. <?php
  2. $polaczenie = mysql_connect('x', 'x', 'x') or die("Brak połączenia: " . mysql_error());
  3. $baza = mysql_select_db('x',$polaczenie) or exit("Nie wybrano bazy, błąd: " . mysql_error());
  4. $zapytanie = "SELECT * FROM czatgg_base ORDER BY wyraz DESC LIMIT 0,10;";
  5. $wynik = mysql_query($zapytanie) or die(mysql_error());
  6. while ($rekord = mysql_fetch_assoc($wynik)) {
  7. echo $rekord['name']. " [" . $rekord['wyraz'] . "]<br />";
  8. }
  9. ?>
modern-web
  1. $zapytanie = "SELECT * FROM czatgg_base ORDER BY wyraz DESC LIMIT 0,10;";


Po 1: Powinno być bez ; po 0,10 ... (to odnośnie kodu gargamela)
Po 2: Po co przypisujesz zapytanie do zmiennej, a dopiero potem wykorzystujesz je... Bez sensu. Lepiej zrób tak:

  1. $wynik = mysql_query("SELECT * FROM czatgg_base ORDER BY wyraz DESC LIMIT 0,10") or die(mysql_error());


Po 3: Już połączyłeś się z bazą, więc po co dajesz je w $wynik ?

Powinno działać. Narazie żadnych innych błędów nie wyłapałem smile.gif

Pozdrawiam!
Crozin
Cytat
Po 1: Powinno być bez ; po 0,10 ... (to odnośnie kodu gargamela)
Bo każde zapytanie kończy się średnikiem? Tak, można to pominąć w masie sterowników dla baz danych, ale raczej dobrą praktyką jest ich stosowanie.
Cytat
Po 2: Po co przypisujesz zapytanie do zmiennej, a dopiero potem wykorzystujesz je... Bez sensu. Lepiej zrób tak:
Bo to nic nie kosztuje, a może być wygodne przy szerokopojętym debugowaniu? Pomijając fakt beznadziejności funkcji mysql_*()
Cytat
Po 3: Już połączyłeś się z bazą, więc po co dajesz je w $wynik ?
W przypadku jednego połączenia z bazą nie jest to konieczne - ale nic nie stoi na przeszkodzie by to jawnie przekazywać.
szczawik
[99]
[99]
[9804]
[965]
[96]
itd.

w taki sposób wyświetliło, a chciałbym żeby rosnąco posortowało, tylko 10 największych:)
gargamel
Zmień format kolumny 'wyraz' na INT
szczawik
Działa, dziękuje wszystkim smile.gif
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.