Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: top10
Forum PHP.pl > Forum > Bazy danych > MySQL
huntercs
Więc tak mam rekordy w tabeli:

Id Imie Nazwisko Adres Film Dni Naleznosci Data Nowy
1 imie nazwisko adres 1 1 1 data 1

chciałbym zrobić top 10 najczęściej wybieranych filmow, chciałem zrobic to jakoś w pętlach ale pewnie da się o wiele prościej...

film to id filmu
gdaq
Na jakiej podstawie oceniasz czestosc wypozyczenia filmu bo tutaj tego nie widze.
Poza tym jelsi dobrze rozumiem to w przedstawionej tabeli masz dane abonenta i wypozyczenia, tylko ze relacja miedzy tymi danymi powinna byc wiele do wielu, a nie jeden do wielu.

Gdaq
huntercs
chodzi mi o to żeby:
zliczalo ile jest wywolan np. id=1 id=2.. i pozniej to sortowalo od najwiecej wywolan id filmu do najmiej limit 10
da sie to zrobic w 1 zapytaniu? tiredsmiley.gif
Vertical
Po pierwsze zmieniłbym nieco strukturę bazy. Do:

Id | Imie | Nazwisko | Adres | Film | Dni | Naleznosci | Data | Nowy
1 | imie | nazwisko | adres | 1 | 1 | 1 | data | 1

...dodałbym jeszcze pole "ilosc_wybran (INT)"
Teraz wyjaśnię jak to ma działać. Po pierwsze użytkownik wybierze dany film klikając w link, żeby móc przesłać informacje o ID filmu metodą GET. Link wyglądałby tak:
  1. <a href = "./index.php?pobierz=$id_filmu&inna_zmienna=costam&inna_zmienna=cos_innego">Pobierz!</a>

...teraz skrypt sprawdzałby za pomocą if/then, czy ustawiony jest parametr "wybierz" w adresie strony. Jeśli jest, doda do pola ilosc_wybran 1 pobranie (+1):
  1. <?php
  2. if ( $_GET['pobierz'] )
  3. {
  4. $db = mysql_connect(&#092;"host\", \"user\", \"haslo\") or die(\"Nie mozna polaczyc sie z baza!\");
  5. mysql_select_db(&#092;"baza\", $db);
  6. mysql_query(&#092;"UPDATE tabela SET ilosc_wybran = ilosc_wybran+1 WHERE id = \". $_GET['pobierz'] .\"\");
  7. }
  8. ?>

...Następnie żeby wyświetlić Top 10 najczęściej wybieranych filmów, napisz:
  1. <?php
  2. $db = mysql_connect(&#092;"host\", \"user\", \"haslo\") or die(\"Nie mozna polaczyc sie z baza!\");
  3. mysql_select_db(&#092;"baza\", $db);
  4. $result = mysql_query(&#092;"SELECT DISTINCT * FROM tabela ORDER BY ilosc_wybran DESC LIMIT 10\");
  5. while( $row = mysql_fetch_array($result) )
  6. {
  7. echo (&#092;"$row[1]<br>\");
  8. }
  9. ?>

...wtedy skrypt wybierze pole "Imie" i posortuje malejąco według wartości INT w polu ilosc_wybran (ponieważ pobierając film użytkownik zwiększa wartość tego pola o 1)

PS. Jeszcze tego nie testowałem, więc jeśli jest w kodzie jakiś błąd to poprawcie
huntercs
bez modyfikacji kodu zrobielm tak (może nietak pro ale jest smile.gif )

  1. <?php
  2. while($count<100)
  3. {
  4. $wykonaj=mysql_query(&#092;"SELECT * FROM $tabela_klienci WHERE film=$count\");
  5. $rows = mysql_num_rows($wykonaj);
  6. if($rows<>0)
  7. {
  8. $wykonaj2=mysql_query(&#092;"SELECT * FROM $tabela_filmy WHERE id=$count\");
  9. while($rows2 = mysql_fetch_array($wykonaj2))
  10. {
  11. $top10[$c]=$rows.&#092;" razy zostal wypozyczony film: \".$rows2['tytul'];
  12. $c++;
  13. }
  14. }
  15. $count++;
  16. }
  17. echo &#092;"<br>\";
  18. echo &#092;"TOP 10\";
  19. echo &#092;"<br>\";
  20. arsort($top10);
  21. reset($top10);
  22. $nr=1;
  23. while (list($key, $val) = each($top10)) {
  24.  echo &#092;"Nr.\".$nr.\" = $val<br>\";
  25.  $nr++;
  26. }
  27. ?>


tylko interesuje mnie jeszcze pobranie maxymalnej wartosci pola bo narazie jest do 100 ;]
  1. <?php
  2. $mysql=mysql_query(&#092;"SELECT MAX(id) FROM $table\");
  3. $show_max=mysql_fetch_row?($mysql);
  4. echo &#092;"MAXL:'.$show;
  5. ?>

jakoś tak?
Vertical
Prawie dobrze, tylko:
  1. <?php
  2. $mysql=mysql_query(&#092;"SELECT MAX(id) FROM $table\");
  3. $show_max=mysql_fetch_row($mysql);
  4. echo &#092;"MAXL:'. $show[0] .'\"; //za pomocą tablicy wybierasz, które pole z tabeli chcesz wyświetlić (w tym przypadku wyświetli ID filmu, bo pole ID jest pierwszym polem w tabel
    i)
  5. ?>
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.