我有 3 个表:videos
、categories
、video_categories
。
在 videos
中,我有 id、title 和其他字段。
在 categories
中,我有 id 和 name。
在 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,将有相同 video_id 的 3 个结果。我可以使用 GROUP BY 或 SELECT DISTINCT 来获得唯一的结果,但我现在如何才能获得类别的名称?
我的预期结果是这样的:
id title categories
1 Video1 pop, rock, jazz
最佳答案
对于选项 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()
函数,
是默认的分隔符。这就是我不在这里使用它的原因。
关于php - 关于优化连接查询的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902380/