![](/img/trans.png)
[英]Add a condition to MySQL JOIN query: WHERE a column equals to result of a query
[英]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.