我已经开始研究我的第一个 MySQL 数据库,但遇到了一个简单的问题。
我的电影按“多对多”关系按类型分类:
“电影”表 +---------+--------------------+ |movie_id |movie_title | +---------+--------------------+ |1 |印第安纳琼斯 | |2 |死者肖恩 | +---------+--------------------+ “流派”表 +---------+-----------+ |流派 ID |流派名称 | +---------+-----------+ |1 |冒险 | |2 |喜剧 | |3 |恐怖 | +---------+-----------+ 'movie_genres' 表 +---------+---------+ |movie_id |流派_id | +---------+---------+ |1 |1 | |2 |2 | |2 |3 | +---------+---------+
我要做的是按流派搜索我的电影表,并显示每部电影的所有流派,例如:
搜索“恐怖” +------------------+--------------+ |电影名称 |类型名称 | +------------------+--------------+ |死者肖恩 |喜剧,恐怖 | +------------------+--------------+
这是我用来搜索恐怖电影的查询
选择 m.movie_title, GROUP_CONCAT(g.genre_name SEPARATOR ', ') 作为流派名称 FROM 电影 左加入genre_movies gm ON gm.movie_id = m.movie_id LEFT JOIN 流派 g ON g.genre_id = gm.genre_id 按 m.movie_id 分组 有流派名称 LIKE '%horror%'
我遇到的问题是,此查询在过滤之前检索了所有表的全部内容,我认为这是非常低效的。有没有更好的方法可以在显示所有相关类型的同时按一种类型进行搜索?