Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql]Lista top 10
ksiegol
post 20.07.2007, 14:45:20
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.06.2007

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


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
Go to the top of the page
+Quote Post
c3zi
post 20.07.2007, 15:08:53
Post #2





Grupa: Zarejestrowani
Postów: 266
Pomógł: 20
Dołączył: 15.11.2006
Skąd: Koszalin

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


count


--------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Go to the top of the page
+Quote Post
Max Damage
post 20.07.2007, 15:10:06
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


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


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
ksiegol
post 20.07.2007, 17:14:13
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.06.2007

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


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
Go to the top of the page
+Quote Post
bmL
post 20.07.2007, 18:13:32
Post #5





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


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 ;]

Ten post edytował bmL 20.07.2007, 18:14:25


--------------------
Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
Go to the top of the page
+Quote Post
ksiegol
post 20.07.2007, 18:37:21
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.06.2007

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


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...
Go to the top of the page
+Quote Post
bmL
post 20.07.2007, 21:02:18
Post #7





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


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


Ten post edytował bmL 20.07.2007, 21:04:06


--------------------
Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
Go to the top of the page
+Quote Post
ksiegol
post 21.07.2007, 09:34:32
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.06.2007

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


Problem rozwiązany.

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

pozdro

Adam
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 Wersja Lo-Fi Aktualny czas: 16.07.2025 - 13:17