如何在不使用子查询的情况下修复此mysql查询?
我有三张桌子。为了这个例子的目的,我将尽可能地简化它 第一个表包含电影ID和名称,第二个表包含流派ID和流派名称(动作、戏剧等)。第三个表存储与每部电影相关联的流派id,因为有些电影有多个流派id。它有两个栏目,流派id和电影id。简单的东西。我试图输出电影列表,以及与每部电影相关的类型列表如何在不使用子查询的情况下修复此mysql查询?,mysql,Mysql,我有三张桌子。为了这个例子的目的,我将尽可能地简化它 第一个表包含电影ID和名称,第二个表包含流派ID和流派名称(动作、戏剧等)。第三个表存储与每部电影相关联的流派id,因为有些电影有多个流派id。它有两个栏目,流派id和电影id。简单的东西。我试图输出电影列表,以及与每部电影相关的类型列表 SELECT * FROM movies LEFT JOIN gen_pairs ON movies.mov_id = gen_pairs.gen_m
SELECT *
FROM movies
LEFT JOIN gen_pairs
ON movies.mov_id = gen_pairs.gen_movieid
LEFT JOIN categories
ON gen_pairs.gen_catid = categories.cat_id
GROUP BY mov_id
这显然会输出每部电影的单一类型,即使在gen_pairs表中有多个类型。我如何让它为每部电影显示一个逗号分隔的类型列表,而不为每一项运行子查询?您的选择应该构建笛卡尔乘积,因此您将得到如下输出
MovieA GenreA
MovieA GenreB
MovieB GenreA
...
但听起来你想要这个:
MovieA GenreA, GenreB
MovieB GenreA
...
MySQL有一个GROUP_CONCAT函数来做您想做的事情:
SELECT m.mov_id, GROUP_CONCAT(c.name)
FROM movies m
LEFT JOIN gen_pairs gp ON (m.mov_id = gp.gen_movieid)
LEFT JOIN categories c ON (gp.gen_catid = c.cat_id)
GROUP BY m.mov_id
注意GROUP_CONCAT和GROUP BY。更正:这将输出任何给定电影的所有类型,每行一个类型,为每个类型的对应类型重复电影名称。忘记GROUP BY子句。修好了,看来行得通。是否有办法从DB(cat_id)获取第二个参数,同时通过数组传递它们?您可以将另一个group_concat(c.cat_id)添加到选择列表中。除此之外,我不知道你的意思。