繁体   English   中英

MySQL查询联接,每个结果条件在哪里

[英]MySQL query join, where for each result condition

我有两个表:对象和标签。 我创建了一个名为objects_tags的交叉表(对不起,我不熟悉该术语...),该交叉表为与对象相关联的每个标签都有一行。 对象可能具有许多标签,并且标签可能与许多对象相关联。

因此,对象可能看起来像这样

  +--------+----------------------------------------+
  | Object | Data                                   |
  |--------|----------------------------------------|
  |Object1 | Lorem Ipsum                            |
  |Object2 | Lorem Ipsum                            |
  |Object3 | Lorem Ipsum                            |
  |        |                                        |
  |        |                                        |
  |        |                                        |
  |        |                                        |
  |        |                                        |
  +--------+----------------------------------------+

数据无关紧要。 标签看起来基本相同,例如:

  +--------+----------------------------------------+
  | Tag    | Data                                   |
  |--------|----------------------------------------|
  |Tag1    | Lorem Ipsum                            |
  |Tag2    | Lorem Ipsum                            |
  |Tag3    | Lorem Ipsum                            |
  |        |                                        |
  |        |                                        |
  |        |                                        |
  |        |                                        |
  |        |                                        |
  +--------+----------------------------------------+

我的“交叉表”看起来像

  +--------+----------------------------------------+
  | Object | Tag                                    |
  |--------|----------------------------------------|
  |Object1 | Tag1                                   |
  |Object2 | Tag1                                   |
  |Object2 | Tag2                                   |
  |Object1 | Tag3                                   |
  |Object3 | Tag2                                   |
  |Object3 | Tag3                                   |
  |        |                                        |
  |        |                                        |
  +--------+----------------------------------------+

我想做的就是获取同时具有Tag1和Tag2的所有对象。 在这里,我只会取回object2。

不起作用的MySQL命令是这样的:

SELECT * FROM objects JOIN objects_tags ON objects_tags.id=objects.id WHERE ( objects_tags.tag = ? AND objects_tags.tag = ? )

?替换为我要搜索的标签,包装为PDO。 此查询未返回任何内容,因为从联接返回的单行没有与之关联的多个标签,并且我正在请求与多个标签匹配的行(此处,我使用AND,使用OR也不起作用,因为它返回的任何行匹配任何搜索词。此结果太宽泛,我希望所有搜索词都匹配)。 它应该返回多行,每行只有一个标签,我想针对每个标签进行搜索。 我只想返回由用户指定数量的标签所标记的对象,但是我不知道如何形成所说的查询。 有什么帮助吗?

您有两个objects_tags要求,因此需要两个objects_tags联接。

SELECT objects.Object
FROM objects
JOIN objects_tags ot1 ON (objects.Object = ot1.Object AND ot1.Tag = 'Tag1')
JOIN objects_tags ot2 ON (objects.Object = ot2.Object AND ot2.Tag = 'Tag2')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM