注意:使用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
。因此,并非所有电影的评级都会显示。这就是为什么,你可以自己尝试一下,尝试在fiddle中使用
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
关于mysql - group_concat 在 SQL 查询中多次显示相同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44940435/