[英]group_concat is displaying same records multiple times in SQL Query
注意:使用DISTINCT
不能解决问题。 (我会解释原因)
这是我的代码
DROP TABLE tmdb_movies; CREATE TABLE tmdb_movies ( tmdb_id INTEGER NOT NULL PRIMARY KEY, movie_title TEXT NOT NULL ); INSERT INTO tmdb_movies (tmdb_id, movie_title) VALUES (1, 'The Dark Knight'); DROP TABLE recommendations; CREATE TABLE recommendations ( recommendations_tmdb_id INTEGER NOT NULL, recommendations_title TEXT NOT NULL, recommendations_vote_average TEXT NOT NULL ); INSERT INTO recommendations (recommendations_tmdb_id, recommendations_title, recommendations_vote_average) VALUES (1, 'The Dark Knight Rises', '7.5'), (1, 'Batman Begins', '7.5'), (1, 'Iron Man', '7.3'), (1, 'The Lord of the Rings: The Return of the King', '8.1'), (1, 'The Lord of the Rings: The The Fellowship of the Ring', '8'), (1, 'The Lord of the Rings: The Two Towers', '7.9'), (1, 'The Matrix', '7.9'), (1, 'Inception', '8'), (1, 'Iron Man 2', '6.6'), (1, 'Captain America: The First Avenger', '6.6'); DROP TABLE cast; CREATE TABLE cast ( cast_tmdb_id INTEGER NOT NULL, cast_name TEXT NOT NULL, cast_character TEXT NOT NULL ); INSERT INTO cast (cast_tmdb_id, cast_name, cast_character) VALUES (1, 'Christian Bale', 'Bruce Wayne / Batman'), (1, 'Michael Caine', 'Alfred Pennyworth'), (1, 'Heath Ledger', 'The Joker'), (1, 'Aaron Eckhart', 'Harvey Dent / Two-Face'), (1, 'Gary Oldman', 'Lt. James Gordon'), (1, 'Maggie Gyllenhaal', 'Rachel Dawes'), (1, 'Morgan Freeman', 'Lucius Fox'), (1, 'Chin Han', 'Lau'), (1, 'Eric Roberts', 'Salvatore Maroni'), (1, 'Monique Gabriela Curnen', 'Ramirez'); SELECT tmdb_movies.movie_title ,GROUP_CONCAT(recommendations.recommendations_title) as recommendations_title ,GROUP_CONCAT(recommendations.recommendations_vote_average) as recommendations_vote_average FROM tmdb_movies LEFT JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmdb_id LEFT JOIN recommendations ON recommendations.recommendations_tmdb_id=tmdb_movies.tmdb_id Where tmdb_movies.tmdb_id= 1 GROUP BY tmdb_movies.movie_title
如您所见, recommendations
表中的记录正在显示多次。 但是,如果我删除此行,则LEFT JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmdb_id
,则它们不会显示多次。 因此,这条线是主要问题。
为了简单起见,我没有在SQL查询中使用强制转换表。 但是我需要。
是的,我需要group_concat才能在PHP代码中一起显示记录
为什么DISTINCT
无法解决问题? 好吧,有些电影的评级相同,例如: 7.5
。 因此,并非所有电影的分级都会显示出来。 这就是为什么您可以自己尝试,尝试在小提琴中使用
QL
您想要这个结果吗?
SELECT tmdb_movies.movie_title
,GROUP_CONCAT(DISTINCT(recommendations.recommendations_title)) as recommendations_title
,GROUP_CONCAT(DISTINCT(recommendations.recommendations_vote_average)) as recommendations_vote_average
FROM tmdb_movies
LEFT JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmdb_id
LEFT JOIN recommendations ON recommendations.recommendations_tmdb_id=tmdb_movies.tmdb_id
Where tmdb_movies.tmdb_id= 1
GROUP BY tmdb_movies.movie_title
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.