login  Naam:   Wachtwoord: 
Registreer je!
 Forum

probleem met inner join

Offline texarcana - 30/09/2006 11:39 (laatste wijziging 30/09/2006 11:39)
Avatar van texarcanaNieuw lid Hallo

Ik heb 3 tabellen, nl film, genre en filmgenre (die laatste is een tussentabel want een film kan meerdere genres bevatten)

Ik wil nu de genres weergeven per film, en als er meerdere genres per films zijn, moet dit bijvoorbeeld zo weergegeven worden: "Actie / Thriller"
Eerst had ik dit zo opgelost:

  1. $sql_genre = mysql_query("SELECT genre_naam FROM genre WHERE genre_id IN (SELECT genre_id FROM filmgenre WHERE film_id = '" . $row_film['film_id'] . "') ORDER BY genre_naam ASC");


maar mijn hosting ondersteunt geen subqueries, dus ik kan deze niet gebruiken, daarom heb ik de querie dan opgesplitst in 2 queries, nl:

  1. $result_genre_id = mysql_query("SELECT genre_id FROM filmgenre WHERE film_id = $filmid");
  2. while ($rowgenre_id = mysql_fetch_row($result_genre_id))
  3. {
  4. $tempgenre = $rowgenre_id[0];
  5.  
  6. $result_genre = mysql_query("SELECT genre_naam FROM genre WHERE genre_id = $tempgenre");
  7.  
  8. while ($rowgenre = mysql_fetch_row($result_genre))
  9. {
  10. if ($genre <> "")
  11. {
  12. $genre .= " / " . $rowgenre[0];
  13. }
  14. else
  15. {
  16. $genre = $rowgenre[0];
  17. }
  18. }
  19. }


probleem hierbij is dat ik niet meer kan sorteren op genre_naam, dus
Actie / Thriller wordt getoond als Thriller / Actie omdat thriller eerder was toegevoegd
dus heb ik het terug met 1 querie geprobeerd door middel van een INNER JOIN, maar de onderstaande code wil niet echt werken:

  1. $sql_genre = mysql_query("SELECT g.genre_naam FROM genre g INNER JOIN filmgenre fg ON fg.genre_id=g.genre_id WHERE fg.film_id = '" . $row_film['film_id'] . "' ORDER BY g.genre_naam ASC");


iemand enig idee wat er verkeerd is aan de laatste querie ?

2 antwoorden

Gesponsorde links
Offline MechaVore - 30/09/2006 12:14
Avatar van MechaVore Gouden medaille

PHP gevorderde
SELECT g.genre_naam
FROM filmgenre fg
INNER JOIN genre g ON fg.genre_id = g.id
WHERE fg.film_id =1
ORDER BY g.genre_naam ASC

Ik heb even snel een testje gedraait op mijn eigen server, en hier werkt het gewoon.. Weet je zeker dat de structuur van je tabbellen goed is,..
Offline texarcana - 30/09/2006 12:31 (laatste wijziging 30/09/2006 12:48)
Avatar van texarcana Nieuw lid ja toch wel, want die andere queries werkten wel  
het ligt precies aan die variabele in die sql querie

dit is mijn volledige code van de querie met de inner join:

  1. $result_genre = mysql_query("SELECT g.genre_naam FROM genre g INNER JOIN filmgenre fg ON fg.genre_id = g.genre_id WHERE fg.film_id = '" . $row_film['film_id'] . "' ORDER BY g.genre_naam ASC");
  2. while ($rowgenre = mysql_fetch_row($result_genre))
  3. {
  4. if ($genre <> "")
  5. {
  6. $genre .= " / " . $rowgenre[0];
  7. }
  8. else
  9. {
  10. $genre = $rowgenre[0];
  11. }
  12. }



dit topic mag als OPGELOST worden beschouwd
$row_film['film_id'] moest $rowfilm['film_id'] zijn, stomme typfout van mij, sorry

alvast bedankt voor de hulp, MechaVore
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.21s