我有3个表:videos
,categories
,video_categories
。
在videos
中,我有id,title和其他字段。
在categories
,我有id和名字。
在video_categories
中,我有id,video_id和category_id。
一个视频可以有多个类别。所以video_categories表就是这样的。
id video_id category_id
1 1 1
2 1 2
3 1 3
如果我想要一个视频列表并显示其类别,哪个更受欢迎?
通过PHP,调用1个查询来获取所有视频,然后循环查询以获取每个视频的类别,并通过另一个查询获取类别名称。如果桌子很大,这会非常慢,对吗?
通过MySQL加入(需要帮助)。如果我将视频连接到video_categories,则会有3个相同video_id的结果。我可以使用GROUP BY或SELECT DISTINCT来获得独特的结果,但我现在如何获得类别的名称?
我的预期结果将是这样的:
id title categories
1 Video1 pop, rock, jazz
答案 0 :(得分:3)
对于选项2,请使用GROUP_CONCAT
。没关系
SELECT v.id, v.title, GROUP_CONCAT(c.name)
FROM videos v
INNER JOIN video_categories vc ON vc.video_id = v.id
INNER JOIN categories c ON vc.category_id = c.id
GROUP BY v.id, v.title
对于Group_Concat()
函数,
是默认分隔符。这就是为什么我不在这里使用它。
答案 1 :(得分:3)
猜猜其他列的名称..
SELECT v.video_id, v.title, GROUP_CONCAT(c.category_name SEPARATOR ', ')
FROM videos v
LEFT JOIN video_categories vc ON vc.video_id = v.video_id
LEFT JOIN categories c ON c.category_id = vc.category_id
GROUP BY v.video_id, v.title