gpt4 book ai didi

MySQL query join, where 对于每个结果条件

转载 作者:行者123 更新时间:2023-11-29 00:32:43 25 4
gpt4 key购买 nike

我有两个表:对象和标签。我已经创建了一个名为 objects_tags 的交叉表(抱歉,我不熟悉这些术语...),其中有一行用于与对象关联的每个标签。对象可能有很多标签,标签可能与许多对象相关联。

所以,对象可能看起来像这样

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

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

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

我的“crosstable”看起来像

  +--------+----------------------------------------+
| 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')

关于MySQL query join, where 对于每个结果条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com