php - 关于优化连接查询的建议

标签 php mysql codeigniter

我有 3 个表:videoscategoriesvideo_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

如果我想要一个视频列表并显示它们的类别,哪个是首选?

  1. 通过 PHP,调用 1 个查询以获取所有视频,然后循环查询以获取每个视频的类别,然后调用另一个查询以获取类别名称。如果表格很大,这会很慢,对吧?

  2. 通过 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/

相关文章:

mysql - Codeigniter MySQL 不正确的日期时间插入

php - 使用 php 变量更改 css 类

MySQL 根本没有启动

mysql - 确保脚本执行或在计划错过时踢掉它

php - 无法从选定的重复 ID (PHP) 和 (MySQL) 中获取总和值

php - 无法在 wamp 中通过 Web 表单插入,但它在 xampp 中有效

php - Laravel 5.1 中上传文件的安全性

PHP if 函数

php - 如何制作 WooCommerce 3.0 单一图片库,使其类似于 2.x 版?

php - CodeIgniter:我在提交注册表时出现此数据库错误 1048。