Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Najwięcej powtórzeń - jak zapytać?[ROZWIĄZANE]
Forum PHP.pl > Forum > Przedszkole
slupek
Serwus,

mam w tabeli "origin_id" gdzie mamy nieskończoną liczbę czteroliterowych wartości.

Chcę wyświetlić pięć najszczęściej występujących (powtarzających się) wartości. Coś w stylu TOP5.

Wiem jak to zrobić dla skończonego zbioru, ale nie mam pojęcia, jak skonstruować zapytanie, gdy "origin_id" może być dowolny.

Pomoże ktoś?
nospor
Cytat
gdzie mamy nieskończoną liczbę czteroliterowych wartości
Kombinacje czteroliterowego ciągu są z reguły skończone winksmiley.jpg

poczytaj w manualu mysql o group by oraz count
slupek
Źle się wyraziłem - są skończone, ale ja mam może 50 - 100 różnych, a mogą się pojawić nietypowe, nie chcę ręcznie ustalać zakresu.

Gdzieś coś paprzę, bo mi krzaczy.

  1. $query = "SELECT COUNT(origin_id) AS ile FROM reports GROUP BY origin_id ORDER BY ile DESC LIMIT 5";
  2. $result = mysql_query($query);
  3. $number = mysql_numrows($result);
  4.  
  5.  
  6. while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
  7. printf ("APT: %s Ldgs: %s", $row[origin_id], $number);
  8.  
  9. }
tvister
origin_id brakuje w sql zapytaniu
Meares
Dajesz COUNT(`orgin_id`) AS 'ile', więc w pętli powinieneś użyć $row['ile'].
slupek
Cytat(Meares @ 24.11.2009, 14:02:03 ) *
Dajesz COUNT(`orgin_id`) AS 'ile', więc w pętli powinieneś użyć $row['ile'].

Krok do przodu, dzięki.

Klik

Tylko nie sczytuje mi wartości z $orgin_id dla każdego wyniku.

(sorki za post pod postem) Ok, doszedłem do celu, działa; teraz kosmetyka: źle określam zmienne, żeby to wstawić do tabelki?

  1. <?php
  2.  
  3. @define ("MYSQL_CONNECT_INCLUDE", "connect_db.php");
  4.  
  5.  
  6.  
  7. include(MYSQL_CONNECT_INCLUDE);
  8.  
  9. $query = "SELECT origin_id , COUNT(origin_id) AS ile FROM reports GROUP BY origin_id ORDER BY ile DESC LIMIT 5";
  10. $result = mysql_query($query);
  11. $number = mysql_numrows($result);
  12.  
  13. print "<table bgcolor=FFFFFF width=30% border=0>";
  14. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>Airport</b></font></td>";
  15. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>Takeoffs</b></font></td>";
  16.  
  17.  
  18.  
  19.  
  20. while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
  21.  
  22. $a= ("%s",$row[origin_id]);
  23. $l= ("%s",$row[ile]);
  24.  
  25. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>$a</b></font></td>";
  26. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>$l</b></font></td>";
  27.  
  28.  
  29.  
  30. }
  31.  
  32.  
  33. php?>


Rozwiązane, dziękuję wszystkim za cenne wskazówki.

  1. <?php
  2.  
  3. @define ("MYSQL_CONNECT_INCLUDE", "connect_db.php");
  4.  
  5.  
  6.  
  7. include(MYSQL_CONNECT_INCLUDE);
  8.  
  9. $query = "SELECT origin_id , COUNT(origin_id) AS ile FROM reports GROUP BY origin_id ORDER BY ile DESC LIMIT 10";
  10. $result = mysql_query($query);
  11. $number = mysql_numrows($result);
  12.  
  13. print "<table bgcolor=FFFFFF width=30% border=1>";
  14. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>Airport</b></font></td>";
  15. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>Takeoffs</b></font></td>";
  16. print "<tr>";
  17.  
  18.  
  19.  
  20.  
  21. while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
  22.  
  23.  
  24.  
  25. $a= ($row[origin_id]);
  26. $l= ($row[ile]);
  27.  
  28. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>$a</b></font></td>";
  29. print "<td bgcolor=FFFFFF width=50% height=18 align=center><font face=Arial color=#000000 size=2><b>$l</b></font></td>";
  30. print "<tr>";
  31.  
  32.  
  33.  
  34. }
  35.  
  36.  
  37. php?>


Pozwólcie, że pociągnę dalej.

  1. $query = "SELECT callsign , COUNT(callsign) AS ile FROM reports GROUP BY callsign ORDER BY ile DESC LIMIT 10";


Chciałbym, żeby podało tylko takie wyniki, gdzie 'callsign' ma więcej niż 6 znaków. Reszta musi zostać. Da się?
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.