我有两个表:对象和标签。我创建了一个名为 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 也不起作用,因为它返回的任何行匹配任何搜索词。此结果太宽泛,我希望匹配所有搜索词)。它应该返回多行,每行有一个标签,我想搜索每一行。我只想返回由用户指定的一些标签标记的对象,但我不知道如何形成所述查询。有什么帮助吗?