login  Naam:   Wachtwoord: 
Registreer je!
 Forum

SQL vraag/probleempje

Offline Loki - 14/05/2011 18:48
Avatar van LokiNieuw lid Hoi,

Ik heb hier thuis een klein databaseje opgezet, zodat ik een beetje leer werken met php en sql.

Nu gaat de database over mijn dvd -cd collectie en ziet er een beetje als volgt uit:

Films tabel: film_id en film_titel
Genre tabel: genre_id en genre_genre
films_genre tabel: film_id en genre_id

De film tabel bestaat enkel uit de titels van de films (vb: Mortal Kombat. Lord of The rings, Harry Potter, ...)
De genre tabel bestaat enkel uit de genres (vb: thriller, actie, science fiction, humor, series ...)

Met de films_genre tabel zorg ik ervoor dat ik op genre kan zoeken...

Volgende SQL werkt prima:

SELECT films.Titel
FROM films, genre, film_genre
WHERE
genre.genre = 'action'
AND film_genre.genre_id = genre.genre_id
AND films.Titel_ID = film_genre.titel_id
ORDER BY films.Titel;

maar nu is de vraag: Hoe kan ik bijvoorbeeld ervoor zorgen dat ik de films zie die bijvoorbeeld tot het genre actie en humor behoord?

3 antwoorden

Gesponsorde links
Offline markla - 14/05/2011 22:25 (laatste wijziging 14/05/2011 22:25)
Avatar van markla PHP interesse
  1. SELECT films.Titel
  2. FROM films, genre, film_genre
  3. WHERE
  4. genre.genre = genre_id
  5. AND film_genre.genre_id = genre.genre_id
  6. AND films.Titel_ID = film_genre.titel_id
  7. ORDER BY films.Titel;
Offline Loki - 15/05/2011 18:37 (laatste wijziging 15/05/2011 18:38)
Avatar van Loki Nieuw lid Dit is niet echt wat ik zoek.
Kan zijn dat de vraag niet echt duidelijk is...

Met:
  1. SELECT films.Titel
  2. FROM films, genre, film_genre
  3. WHERE
  4. genre.genre = 'action'
  5. AND film_genre.genre_id = genre.genre_id
  6. AND films.Titel_ID = film_genre.titel_id
  7. ORDER BY films.Titel;


bekom ik alle films in het genre actie.

Nu wil ik films kunnen terug vinden die meer dan 1 genre hebben meegekregen... Bijvoorbeeld: Actie EN Humor... Maar hier vind ik niet echt een degelijke sql-code/instructie voor...
Offline Martijn - 16/05/2011 18:50 (laatste wijziging 16/05/2011 18:51)
Avatar van Martijn Crew PHP ik denk niet dat mysql dat simpel kan wat makkelijker is, en t voelt minder spannend, maar geeft wel een hogere controle.
----------------------------------------------------------------
Oeps, dat werd opeens veel meer dan in gedachte had
Nouja, lees m goed door en leer ervan zou ik zeggen
Het lijkt veel, maar het is in principe een paar keer hetzelfde principe
----------------------------------------------------------------
  1. // Alle genres in een array zetten zodat je later niet meer hoeft te doen per film:
  2. $genres = array();
  3. //SELECT alle genres met hun id's
  4. $sGenres = mysql_query("SELECT genre_id,genre_genre FROM genre") or die(mysql_error());
  5. // Ga ze 1 voor 1 af:
  6. while($fGenres = mysql_fetch_assoc($sGenres)){
  7. // Zet het genre en id in een array:
  8. $genres[ $fGenres['genre_id'] ] = $fGenres['genre_genre'];
  9. }
  10. // Als je het resultaat op je scherm wilt zien van de $genres die we nu hebben dit uncommenten:
  11. // print_r($genres);
  12.  
  13. //////////////////////////
  14. /// En dan nu de films ///
  15. //////////////////////////
  16.  
  17. // Alle films in een array zetten zodat je later extra dingen ermee kan doen
  18. $films = array();
  19. // SELECT alles wat je wilt van films:
  20. $sFilms = mysql_query("SELECT film_id, title FROM films") or die(mysql_error());
  21. // Ga ze daarna 1 voor 1 af:
  22. while($fFilms = mysql_fetch_assoc($sFilms)){
  23. // array aanmaken (of bij de 2e juist legen)
  24. $genres4film = array();
  25. // SELECT doen op je tussentabel
  26. $sGrenres4film = mysql_query("SELECT genre_id WHERE film_id=".$fFilms['id']) or die(mysql_error());
  27. // Ga ze daarna 1 voor 1 af:
  28. while($fGenres4films = mysql_fetch_assoc($sGenre4film)){
  29. // nu opslaan, en handig met de array van genres:
  30. $genres4film[] = $genres[$fGenre4films['genre_id']]; // Dit geeft nu de naam zoals 'humor'
  31. }
  32. // Opslaan bij de films
  33. $film[$fFilms['title']] = $genres4film; // Nu heb je het als array
  34. }
  35. foreach($film as $title => $genres){
  36. if(count($genres >= 2){
  37. echo $title." heeft 2 of meer genres, namelijk: ".implode(" & ",$genres)." <br /> \n";
  38. }
  39. }
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.199s