我已经开始开发我的第一个MySQL数据库,我遇到了一个简单的问题。
我将我的电影按“多对多”关系进行分类:
'movies' Table +---------+-------------------+ |movie_id |movie_title | +---------+-------------------+ |1 |Indiana Jones | |2 |Shaun of the Dead | +---------+-------------------+ 'genres' table +---------+-----------+ |genre_id |genre_name | +---------+-----------+ |1 |adventure | |2 |comedy | |3 |horror | +---------+-----------+ 'movie_genres' table +---------+---------+ |movie_id |genre_id | +---------+---------+ |1 |1 | |2 |2 | |2 |3 | +---------+---------+
我试图做的是按类型搜索我的电影表,并显示每部电影的所有类型,例如:
Searching 'horror' +------------------+---------------+ |movie_title |genre_names | +------------------+---------------+ |Shaun of the Dead |comedy, horror | +------------------+---------------+
这是一个我用来搜索恐怖电影的查询
SELECT m.movie_title, GROUP_CONCAT(g.genre_name SEPARATOR ', ') as genre_names FROM movies m LEFT JOIN genre_movies gm ON gm.movie_id = m.movie_id LEFT JOIN genres g ON g.genre_id = gm.genre_id GROUP BY m.movie_id HAVING genre_names LIKE '%horror%'
我遇到的问题是,这个查询在筛选之前检索所有表的全部,我收集的结果非常低效。有没有更好的方法可以在显示所有相关类型的同时按一种类型搜索?
SELECT m.movie_title, GROUP_CONCAT(g.genre_name SEPARATOR ', ') as genre_names
FROM movies m
INNER JOIN
(
SELECT gm.movie_id
FROM genre_movies gm
INNER JOIN genres g
ON g.genre_id = gm.genre_id
WHERE g.genre_name = 'horror'
GROUP BY gm.movie_id
) a ON a.movie_id = m.movie_id
INNER JOIN genre_movies gm ON gm.movie_id = m.movie_id
INNER JOIN genres g ON g.genre_id = gm.genre_id
GROUP BY m.movie_id
你为什么不把genre_id放在电影桌上?
大概是这样的:
'movies' Table
+---------+------------+---------------------+
|movie_id |movie_genre |movie_title |
+---------+----------------------------------+
|1 |1 | Indiana Jones |
|2 |2 ,3 | Shaun of the Dead |
+---------+----------------------------------+
所以你只需要两张桌子。并且可以很容易地过滤查询中的数据。
我试图做的是按类型搜索我的电影表,并显示每部电影的所有类型,例如:
可能是这样的:
SELECT fields FROM table WHERE movie_genre LIKE %movie_genre_id%
试试这个:
SELECT m.movie_title, A.genre_names
FROM movies m
INNER JOIN (SELECT gm.movie_id, GROUP_CONCAT(g.genre_name SEPARATOR ', ') AS genre_names
FROM genre_movies gm INNER JOIN genres g ON g.genre_id = gm.genre_id
GROUP BY gm.movie_id) AS A ON m.movie_id = A.movie_id
WHERE genre_names LIKE '%horror%'
我在Books表和Authors表之间有多对多的关系。透视表(author_book)包含author_id和book_id。
问题内容: 仍在学习MySQL的绳索,我试图找出如何进行涉及多对多的特定选择。如果表名太通用,我深表歉意,我只是在做一些自制的练习。我尽力成为一名自学者。 我有3个表,其中一个是链接表。如何编写 “显示哪些用户同时拥有HTC和Samsung手机” (他们拥有2部手机)的语句。我猜答案在WHERE语句中,但我不知道该怎么写。 问题答案: 关键是在GROUP BY / HAVING中使用COUNT个D
问题内容: 我有一个包含两个主表和一个数据库。它们之间存在多对多的关系。我想知道的是如何使用SQL使用多个标签搜索笔记? 例如,如果我有一个带有三个标签“一个”,“两个”和“三个”的注释“ test”,而我有一个带有标签“一个”和“两个”的第二个注释“ test2”,那么将执行什么SQL查询找到与标签“一个”和“两个”相关联的所有注释? 问题答案: 要获取 同时 带有标签“ One”和“ Two”
问题内容: 有点复杂的问题,但是,基本上我有很多表: 它是和关系的列表。我需要查询以查找word_a和word_b之间的关系是否存在。如果单词可以是单词A或单词b,那么正确的语法是什么? 在我的脑海里 这似乎不起作用,因为我得到了任何一场比赛的结果。有人熟悉这种情况并知道正确的语法吗? 提前致谢。 问题答案: 这应该工作:
问题内容: 我从来没有真正听到过关于这个问题的直接答案,我只需要FULLTEXT搜索包含多个单词“ Firstname Lastname”的几列 但是,如果我在此处输入多个单词,它将无法运行查询。 问题答案: 如果要进行精确搜索:
问题内容: 我正在努力创建一个搜索多个单词的搜索。我的第一次尝试没有任何结果,结果如下: 我还尝试了以下方法,这些方法产生了结果,但是正如您可以想象的那样,我输入的每个单词都得到了重复的结果: 我对如何进行此操作非常迷惑,不胜感激。 编辑: 问题答案: 我已经在同一个主题(搜索关键字)上工作了一段时间,这是我的工作方式: -现在这就是我尝试使用FULLTEXT搜索运行它的样子:但是您应该将表类型设