Faire 3 jointures sur un même table en une requete sql

Fermé
Wmalain - 23 oct. 2020 à 11:56
 Wmalain - 23 oct. 2020 à 12:28
Bonjour a tous!

je démarre en PHP et je suis sur un petit projet de site, en gros c'est un site de cinema. j'ai une table film et plusieurs autres tables qui tourne autour.
une table film, genre, style ect...

le problème que j'ai c'est que lorsque je rentre un film dans ma base de donnée je veux pouvoir entrer plusieurs style de film. dans mon formulaire j'ai donc fait 3 champs style. mais lorsque j'essaie de faire une jointure de table pour ces trop champs (donc id_style1, id-style2 et id-style3) j'ai une fatal error qui semble venir du fait que je joigne 3 fois la même table dans une seul requête sql

ma requête sql


'SELECT *, age.id AS age_id, date.id AS date_id, genre_de_film.id AS genre_id, type_de_film.id AS type_id FROM movie LEFT JOIN age ON movie.id_age = age_id LEFT JOIN date ON movie.id_date = date_id LEFT JOIN genre_de_film ON movie.id_genre = genre_id LEFT JOIN (type_de_film ON movie.id_type1 = type_id) OR (type_de_film ON movie.id_type2 = type_id) OR (type_de_film ON movie.id_type3 = type_id) order by RAND() limit 0,1'

j'ai testé avec des OR mais cela n'a rien donné.

je ne sais pas si j'ai été claire dans mes explications^^! si un de vous a une idée pour faire 3 jointures ManyToOne sur un même table dans la même requête SQL je suis preneur^^! merci par avance



Configuration: Windows / Chrome 86.0.4240.111

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 23 oct. 2020 à 12:40
Bonjour,

Plusieurs choses
1 - Ta question concerne d'avantage le SQL que le PHP .. je déplace donc dans le forum Mysql.

2 - Tu n'as pas vu comment s'utilise une base de données relationnelles.. ou alors tu n'as pas pris les bonnes "pratiques".
On ne créé pas une colonne par style ....
A la place, on va créer une autre table par exemple : movie_styles ( #id, id_movie , id_style )
De cette façon, tu peux lier autant de styles que tu veux à tes films..

Ta requete devient alors
SELECT M.*
             ,TF.*
FROM movie M
INNER JOIN movie_styles MS  ON MS.id_movie = M.id
LEFT JOIN type_de_film TF ON TF.id = MS.id_style
LEFT JOIN .. tes autres jointures


1
en effet ca me semble beaucoup plus logique! merci pour la réponse je test ca des que possible ^^!
0