Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z wyszukiwaniem:(
Forum PHP.pl > Forum > Przedszkole
Moniamo
Witam

Mam problem z wyszukiwaniem filmow z bazy...tzn potrafie zrobic wyszukiwanie po tytule filmu, natomiast nie moge sobie poradzic z wyszukiwaniem po np: gatunku filmu, aktorze, rezyserze...itp...
Moj plik w php tak wyglada:
  1. <?
  2. mysql_connect ("localhost","root","krasnal");
  3.  
  4. if($_POST['stan']=='Szukaj') {
  5.  
  6. if ($_POST['wybor']=="tytul" && !empty($znajdz))
  7. {
  8. $zapytanie = "SELECT film.id, tytul, nazwisko, nazwa_gatunku, czas, data_2, nazwa_kraju, 
    opis FROM film, produkcja, gatunek, rezyser WHERE film.id=produkcja.id AND film.i
    d=gatunek.id AND tytul like "
    %$znajdz%" GROUP BY tytul order by tytul";
  9. $wykonaj = mysql_query ($zapytanie);
  10. }
  11. elseif ($_POST['wybor']=="produkcja" && !empty($znajdz))
  12. {
  13. $zapytanie = "SELECT film.id, tytul, nazwisko, nazwa_gatunku, czas, data_2, nazwa_kraju, 
    opis FROM film, produkcja, gatunek, rezyser WHERE film.id=produkcja.id AND film.i
    d=gatunek.id AND nazwa_kraju like "
    %$znajdz%" GROUP BY tytul order by nazwa_kraju";
  14. $wykonaj = mysql_query ($zapytanie);
  15. }
  16. elseif ($_POST['wybor']=="rezyser" && !empty($znajdz))
  17. {
  18. $zapytanie = "SELECT film.id, tytul, nazwisko, nazwa_gatunku, czas, data_2, nazwa_kraju, 
    opis FROM film, produkcja, gatunek, rezyser WHERE film.id=produkcja.id AND film.i
    d=gatunek.id and nazwisko like "
    %$znajdz%" GROUP BY nazwisko";
  19. $wykonaj = mysql_query ($zapytanie);
  20. }
  21. elseif ($_POST['wybor']=="aktor" && !empty($znajdz))
  22. {
  23. $zapytanie = "SELECT film.id, tytul, nazwisko_aktora, nazwisko, nazwa_gatunku, czas, data
    _2, nazwa_kraju, opis FROM film, produkcja, gatunek, rezyser, aktor_has_film, akt
    or WHERE (film.id=produkcja.id AND film.id=gatunek.id and film.id=aktor_has_film.akto
    r_id and aktor_has_film.aktor_id=aktor.id_aktor) and nazwisko_aktora like "
    %$znajdz%" GROUP BY tytul";
  24. $wykonaj = mysql_query ($zapytanie);
  25. }
  26. elseif ($_POST['wybor']=="gatunek" && !empty($znajdz))
  27. {
  28. $zapytanie = "SELECT film.id, tytul, nazwisko, nazwa_gatunku, czas, data_2, nazwa_kraju, 
    opis FROM film, produkcja, gatunek, rezyser WHERE (film.id=produkcja.id AND film.id=gatunek.id and gatunek.id=gatunek.id) and nazwa_gatunku like "
    %$znajdz%" GROUP BY nazwa_gatunku";
  29. $wykonaj = mysql_query ($zapytanie);
  30. }
  31.  
  32.  
  33. if (@mysql_num_rows($wykonaj)==0)
  34. {
  35. echo '<h2><body bgcolor=#E9967A><font color=#660000>Przykro mi, ale nie znaleziono rekordów o zadanych kryteriach</font></b></h2>';
  36.  
  37.  
  38. echo "<STYLE TYPE="text/css">
  39. .nounderline A {text-decoration:none;}
  40. </STYLE>
  41.  
  42. <br><br>
  43. <DIV CLASS="nounderline">
  44. <center>
  45. <a href="szukaj.php" target="mainFrame"><BUTTON TYPE=SUBMIT>OK</BUTTON></a>
  46. </center>
  47. <br>";
  48.  
  49. }
  50. else
  51. {
  52.  
  53. echo "
  54. <body bgcolor="#E9967A">
  55. <table bgcolor="#E9967A" border="1" width="720" cellspacing="3" cellpadding="">
  56. <tr>
  57. <td width="720" colspan="10" bgcolor="#E9967A">
  58. <p align="center"><b><font color="660000" size="2">WYNIKI WYSZUKIWANIA</font></b></td>
  59. </tr>
  60. <tr>
  61. <td width="130" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Tytul</font></td>
  62. <td width="110" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Aktor</font></td>
  63. <td width="110" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Rezyser</font></td>
  64. <td width="110" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Gatunek</font></td>
  65. <td width="50" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Czas</font></td>
  66. <td width="80" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Rok</font></td>
  67. <td width="70" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Produkcja</font></td>
  68. <td width="300" align="center" bgcolor="#A52A2A"><font color="#E9967A" size="2">Opis</font></td>
  69. </tr>
  70. </b>
  71. ";
  72.  
  73. while($wiersz=mysql_fetch_array ($wykonaj)) {
  74.  
  75. echo " <tr>
  76. ";if(isset($HTTP_SESSION_VARS['prawid_uzyt']))
  77. {
  78. echo"<td width="130"><a href=komentarz.php?id=".$wiersz['id']." target=mainFrame>".$wiersz['tytul']."</a></td>";
  79. }else{
  80. echo"<td width="130">".$wiersz['tytul']."</td>";
  81. }
  82. echo"<td width="110">".$wiersz['nazwisko_aktora']."</td>
  83. <td width="110">".$wiersz['nazwisko']."</td>
  84. <td width="110">".$wiersz['nazwa_gatunku']."</td>
  85. <td width="50">".$wiersz['czas']."</td>
  86. <td width="80">".$wiersz['data_2']."</td>
  87. <td width="70">".$wiersz['nazwa_kraju']."</td>
  88. <td width="300">".$wiersz['opis']."</td>
  89. </tr>";
  90. }
  91. }
  92. }
  93. ?>


W bazie danych mam takie tabele:
aktor (id_aktor, imie, nazwisko_aktora)
aktor_has_film(AKTOR_id, FILM_id)
film(id, PRODUKCJA_id, GATUNEK_id, tytul, czas, data_2, opis, id_aktor, id_rezyser)
gatunek(id, nazwa_gatunku)
komentarz(id, UZYTKOWNIK_login, FILM_id, tresc, data)
produkcja(id, nazwa_kraju)
rezyser(id, imie, nazwisko)
rezyser_has_film(REZYSER_id, FILM_id)
uzytkownik(login, nr_pesel, imie, nazwisko, haslo, czy_admin)

Nie wiem juz sama co jest nie tak z tymi zapytaniami sql, ze wyszukuje tylko po tytule:(
Jesli to mozliwe bardzo prosze o pomoc.

Z gory wielkie dzieki
Monika.
Norbas
Cytat
Nie wiem juz sama co jest nie tak z tymi zapytaniami sql, ze wyszukuje tylko po tytule:(

To że wyszukuje po tytule to tylko przypadek. Przy innych danych nie powinno być prawidłowych wyników

Źle łączysz ze sobą tabele. Powinny być połączone za pomocą identyfikatora, ale takiego, który oznacza to samo w obu tabelach, czyli:
  1. film.produkcja_id=produkcja.id
  2. film.gatunek_id=gatunek.id
  3. itd.
Moniamo
Dzieki za radę, zrobilam tak jak napisales, ale teraz problem jest w tym, że z tabeli np. gatunek gdzie mam kilka komedii, wyswietla tylko pierwsza komedie:(
Nie wiem dlaczego?

Monika.
Norbas
  1. ... GROUP BY nazwa_gatunku

Grupujesz wg nazwy gatunku. Prawdopodobnie chcesz posortować, czyli powinno się wykorzystać ORDER BY. Podobnie przy innych zapytaniach 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.