Php sql中的链接和语句

Php sql中的链接和语句,php,mysql,sql,Php,Mysql,Sql,我已经为电影创建了一个数据库。就像练习一样。我为浪漫、动作、动画、女性主角、男性主角等电影添加了标签,。。。。等等每部电影都有一个id,并通过一个额外的表与相应标签的id链接。所以现在,当我想要发送一个查询,在其中我寻找多个标记并要求返回一个电影标题时,我什么也得不到,尽管在数据库中有一个包含这些标记的电影片段。我觉得我的错误在我的问题中的某个地方,但我不知道在哪里。有人有主意吗?查询如下所示: SELECT DISTINCT movie.title FROM movie JOIN

我已经为电影创建了一个数据库。就像练习一样。我为浪漫、动作、动画、女性主角、男性主角等电影添加了标签,。。。。等等每部电影都有一个id,并通过一个额外的表与相应标签的id链接。所以现在,当我想要发送一个查询,在其中我寻找多个标记并要求返回一个电影标题时,我什么也得不到,尽管在数据库中有一个包含这些标记的电影片段。我觉得我的错误在我的问题中的某个地方,但我不知道在哪里。有人有主意吗?查询如下所示:

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不是你的错。这个答案是不正确的。