【发布时间】:2017-07-06 15:16:31
【问题描述】:
注意:使用DISTINCT 不会解决问题。 (我会解释原因)
这是我的代码
删除表 tmdb_movies; 创建表 tmdb_movies ( tmdb_id INTEGER NOT NULL PRIMARY KEY, movie_title 文本不为空 ); 插入 tmdb_movies(tmdb_id,movie_title)值 (1,“黑暗骑士”); DROP TABLE 建议; CREATE TABLE 建议 ( 建议_tmdb_id INTEGER NOT NULL, 推荐标题文本不为空, 推荐投票平均文本不为空 ); 插入建议(recommendations_tmdb_id、recommendations_title、recommendations_vote_average)值 (1,“黑暗骑士崛起”,“7.5”), (1,“蝙蝠侠开始”,“7.5”), (1,“钢铁侠”,“7.3”), (1,《指环王:王者归来》,《8.1》), (1,《指环王:魔戒团契》,'8'), (1,《指环王:两塔》,《7.9》), (1,“矩阵”,“7.9”), (1,“盗梦空间”,“8”), (1、《钢铁侠2》、《6.6》)、 (1,《美国队长:第一复仇者》,《6.6》); DROP TABLE 演员表; 创建表强制转换( cast_tmdb_id 整数非空, cast_name 文本不为空, cast_character 文本不为空 ); 插入转换(cast_tmdb_id、cast_name、cast_character)值 (1,“克里斯蒂安·贝尔”,“布鲁斯·韦恩 / 蝙蝠侠”), (1,“迈克尔凯恩”,“阿尔弗雷德彭尼沃斯”), (1,“希斯莱杰”,“小丑”), (1,'Aaron Eckhart','Harvey Dent / Two-Face'), (1,“加里·奥德曼”,“詹姆斯·戈登中尉”), (1,“玛吉·吉伦哈尔”,“瑞秋·道斯”), (1,“摩根弗里曼”,“卢修斯福克斯”), (1, 'Chin Han', 'Lau'), (1,“埃里克·罗伯茨”,“萨尔瓦多·马罗尼”), (1,“莫妮克·加布里埃拉·柯南”,“拉米雷斯”); 选择 tmdb_movies.movie_title ,GROUP_CONCAT(recommendations.recommendations_title) 作为推荐标题 ,GROUP_CONCAT(recommendations.recommendations_vote_average) 作为推荐_投票_平均 来自 tmdb_movies LEFT JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmdb_id LEFT JOIN 建议 ON Recommendations.recommendations_tmdb_id=tmdb_movies.tmdb_id 其中 tmdb_movies.tmdb_id= 1 按 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
【问题讨论】:
-
当你在另一个问题中有几个广泛的答案时,你为什么要提出一个新问题?
-
您不是just ask this same question 使用了其他帐户吗?
-
@TimBiegeleisen 这比你想象的还要糟糕。这是同一“其他帐户”上的原件。 stackoverflow.com/questions/44931926/…
-
你是看我在另一个问题中的回答,还是看 sqlfiddle?
-
伙计们、我和托比正在共同开展这个项目。 Toby 让我从我的帐户中询问,因为 Shadow 不公平地锁定了该主题。 (它不是重复的)。谢谢大家