Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]Lista top 10
Forum PHP.pl > Forum > Przedszkole
ksiegol
Witajcie

Zrobiłem na stronie formularz rejestracyjny gdzie oprócz wielu innych danych podaje się też miasto, z którego się pochodzi. Wszystkie dane zapisywane są potem w bazie MySql. Na stronie gdzie wyświetlane są zarejestrowane osoby pobieram dane z bazy i chciałbym zrobić listę top 10 najczęściej podawanych miast (w formacie Lp. / miasto / liczba użytkowników). Czy istnieje może jakaś funkcja, której nie znam (co jest wielce prawdopodobne), którą mógłbym sczytać z bazy ile razy pojawiają się poszczególne miasta, aby następnie wyświetlić w kolejności malejącej pierwszą dziesiątkę? A może ktoś jest w stanie podopowiedzieć jakiś prosty algorytm jak to zrobić, bo ja już nie mam pomysłów.

z góry dziękuję za waszą pomoc

Adam
c3zi
count
Max Damage
Nie jestem w tym zbyt dobry, ale myślę, że musisz najpierw utworzyć tablicę i skorzystać z funkcji : rsort, asort, ksort zależnie co dokładnie chcesz wykorzystać.
ksiegol
Tak właśnie myślałem, że będę musiał dla tego celu stworzyć nową tabelę. Niestety ja też nie jestem w tym najlepszy :/ Czy ktoś mógłby mi pomóc i pokazać jak zrobić prostą pętelkę, która policzy najpierw wszystkie rekordy gdzie podane zostało takie samo miasto, zapisze w tablicy, uszereguje według najczęściej podawanego miasta, a następnie wyświetli pierwszą dziesiątkę z tak uszeregowanej tablicy. Znalazłem na wzór coś takiego:
  1. <?
  2. $tab = Array();
  3.  
  4. // wykonanie zapytania i...
  5.  
  6. $q = "SELECT imiona FROM osoby";
  7. $q = mysql_query($q);
  8.  
  9. // ...utworzenie tablicy
  10.  
  11. if (mysql_num_rows($q) > 0)
  12. while ($r = mysql_fetch_array($q))
  13. $tab[$r[0]] += 1;
  14.  
  15. // wypisanie danych
  16.  
  17. foreach($tab as $index => $wartosc)
  18. echo $index.": ".$wartosc."<br>n";
  19. ?>


Po utworzeniu takiej tablicy będę musiał jak rozumiem posortować ją jeszcze przy pomocy arsort.
Przerobiłem to co powyżej dla własnych potrzeb i nawet zaczęło działać. Problem w tym, że kiepski jestem w pętlach i nie wiem jak w tym przykładzie przerobić foreach na pętlę powtarzającą się 10 razy, która wyświetli tylko pierwszych 10 wyników.

z góry dzięki za wskazówki

pozdro

Adam
bmL
Idąc na około można to zrobić tak
  1. <?
  2. $tab = Array();
  3.  
  4. // wykonanie zapytania i...
  5.  
  6. $q = "SELECT imiona FROM osoby";
  7. $q = mysql_query($q);
  8.  
  9. // ...utworzenie tablicy
  10.  
  11. if (mysql_num_rows($q) > 0)
  12. while ($r = mysql_fetch_array($q))
  13. $tab[$r[0]] += 1;
  14.  
  15. // wypisanie danych
  16.  
  17. foreach($tab as $index => $wartosc)
  18. {
  19. for($x = 0; x < 10; $x++)
  20. {
  21. echo $index.": ".$wartosc."<br>n";
  22. }
  23. }
  24. ?>

Chyba o to ci chodziło? Trochę nie potrzebne obciążenie parsera ale ja też się na pętlach nie znam tongue.gif
EDIT: ja się na php nie znam ;]
ksiegol
Rozwiązanie, które podałeś nie wyświetli mi pierwszych 10 wyników, tylko wszystkie wyniki po 10 razy smile.gif Czyli to jeszcze nie to...
bmL
Fakt, ale głupi jestem to będzie tak (chyba tongue.gif):
  1. <?
  2. $tab = Array();
  3.  
  4. // wykonanie zapytania i...
  5.  
  6. $q = "SELECT imiona FROM osoby";
  7. $q = mysql_query($q);
  8.  
  9. // ...utworzenie tablicy
  10.  
  11. if (mysql_num_rows($q) > 0)
  12. while ($r = mysql_fetch_array($q))
  13. $tab[$r[0]] += 1;
  14.  
  15. // wypisanie danych
  16. $x=0;
  17. foreach($tab as $index => $wartosc)
  18. {
  19. if($x < 10)
  20. {
  21. echo $index.": ".$wartosc."<br>n";
  22. }
  23. $x++;
  24. }
  25. ?>
ksiegol
Problem rozwiązany.

Dzięki, chodziło właśnie o to.

pozdro

Adam
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.