La question est d'obtenir des données de colonne de table et de l'utiliser comme liste de valeurs pour la fonction IN;MySQL - Comment utiliser la sous-requête dans l'instruction IN par la valeur
Pour cet exemple, je crée 2 tables: films et genres
Table des "films" contient 3 colonnes: id, nom et genre. Le tableau "genres" contient 2 colonnes: identifiant et nom.
+- movies-+
| |- movie_id - int(11) - AUTO_INCREMENT - PRIMARY
| |- movie_name - varchar(255)
| |- movie_genres - varchar(255)
|
|
+- genres-+
|- genre_id - int(11) - AUTO_INCREMENT - PRIMARY
|- genre_name - varchar(255)
Les deux tableaux contiennent certaines données fictives:
+----------+------------+--------------+
| movie_id | movie_name | movie_genres |
+----------+------------+--------------+
| 1 | MOVIE 1 | 2,3,1 |
| 2 | MOVIE 2 | 2,4 |
| 3 | MOVIE 3 | 1,3 |
| 4 | MOVIE 4 | 3,4 |
+----------+------------+--------------+
+----------+------------+
| genre_id | genre_name |
+----------+------------+
| 1 | Comedy |
| 2 | Fantasy |
| 3 | Action |
| 4 | Mystery |
+----------+------------+
Mon but est d'obtenir le résultat comme celui-ci:
+----------+------------+--------------+-----------------------+
| movie_id | movie_name | movie_genres | movie_genre_names |
+----------+------------+--------------+-----------------------+
| 1 | MOVIE 1 | 2,3,1 | Fantasy,Action,Comedy |
| 2 | MOVIE 2 | 2,4 | Fantasy,Mystery |
| 3 | MOVIE 3 | 1,3 | Comedy,Action |
| 4 | MOVIE 4 | 3,4 | Action,Mystery |
+----------+------------+--------------+-----------------------+
J'utilise cette requête et cela fonctionne en partie seul problème est qu'il utilise la première valeur du champ movie_genres
dans la liste de valeurs IN.
SELECT `m` . * , GROUP_CONCAT(`g`.`genre_name`) AS `movie_genre_names`
FROM `genres` AS `g`
LEFT JOIN `movies` AS `m` ON (`g`.`genre_id`
IN (
`m`.`movie_genres`
))
WHERE `g`.`genre_id`
IN (
(
SELECT `movie_genres`
FROM `movies`
WHERE `movie_id` =1
)
)
GROUP BY 1 =1
Les résultats diffèrent grandement de celui que je veux:
+----------+------------+--------------+-------------------+
| movie_id | movie_name | movie_genres | movie_genre_names |
+----------+------------+--------------+-------------------+
| 1 | MOVIE 1 | 2,3,1 | Fantasy,Fantasy |
+----------+------------+--------------+-------------------+
Désolé si je manquais certaines données, je suis nouveau à MySQL.
Quelle requête dois-je utiliser pour obtenir les résultats voulus?
how do u créer cette belle structure de table figurant sur ce page.is-il snytax pour créer table dans stackoverflow? – diEcho
Premier à la main et d'autres par shell mysql – George