Php sql中的链接和语句
我已经为电影创建了一个数据库。就像练习一样。我为浪漫、动作、动画、女性主角、男性主角等电影添加了标签,。。。。等等每部电影都有一个id,并通过一个额外的表与相应标签的id链接。所以现在,当我想要发送一个查询,在其中我寻找多个标记并要求返回一个电影标题时,我什么也得不到,尽管在数据库中有一个包含这些标记的电影片段。我觉得我的错误在我的问题中的某个地方,但我不知道在哪里。有人有主意吗?查询如下所示:Php sql中的链接和语句,php,mysql,sql,Php,Mysql,Sql,我已经为电影创建了一个数据库。就像练习一样。我为浪漫、动作、动画、女性主角、男性主角等电影添加了标签,。。。。等等每部电影都有一个id,并通过一个额外的表与相应标签的id链接。所以现在,当我想要发送一个查询,在其中我寻找多个标记并要求返回一个电影标题时,我什么也得不到,尽管在数据库中有一个包含这些标记的电影片段。我觉得我的错误在我的问题中的某个地方,但我不知道在哪里。有人有主意吗?查询如下所示: SELECT DISTINCT movie.title FROM movie JOIN
SELECT DISTINCT
movie.title
FROM
movie
JOIN
movie_tags ON movie.id = movie_tags.movie_id
JOIN
tags ON movie_tags.tag_id = tags.id
WHERE
tags.name = 'animated' && 'male main character'
ORDER BY
title ASC
你不能使用&&连接“动画”和&“男性主角”
使用tags.name='animated'和tags.name='male main character'如果要查找同时带有这两个标签的电影,则要查找的查询如下:
SELECT m.title
FROM movie m JOIN
movie_tags mt
ON m.id = mt.movie_id JOIN
tags t
ON mt.tag_id = t.id
WHERE t.name IN ('animated', 'male main character')
GROUP BY title ASC
HAVING COUNT(DISTINCT t.name) = 2;
注:
使用表别名和限定列名,尤其是在学习SQL时。这是一个好习惯。
表达式:t.name='animated'和t.name='male main character'显然永远不会为真。t.name`不能同时具有这两个值。
分组方式将电影标题的所有行合并在一起。老实说,SELECT DISTINCT几乎从来都不是正确的构造;更多的时候,你需要分组。
HAVING子句指定这两个标记都在电影上。
谢谢,我试试这个非常好,谢谢。现在,我只需要编辑我的PHP代码:是的,我的错。我是用PHP写的,所以我养成了使用&&&的习惯:PU不能使用&&&-&&是完全有效的编辑:@airbeat不是你的错。这个答案是不正确的。