我想使用以下查询从我的 posts
表中检索结果。我想选择声明中 where 部分中的两个条件都通过的帖子。
其中术语类型为类别且位于 CategoryTest
以及术语类型为标签且位于 TagTest 中的位置
WHERE IN
条件当前包含一个元素,但可能包含多个元素。 两者 如果另一个没有出现,WHERE
给出结果。 所以每个都可以单独工作,或者与 OR
一起工作。它返回了同一篇文章,id 33 - 所以我认为 WHERE 组设置不正确。 p>
SELECT `posts`.*
FROM `posts`
LEFT JOIN `post_term` ON `posts`.`id` = `post_term`.`post_id`
LEFT JOIN `terms` ON `terms`.`id`= `post_term`.`term_id`
LEFT JOIN `meta` ON `meta`.`post_id` = `posts`.`id`
WHERE (
`terms`.`type` = 'category'
AND `terms`.`name` IN('CategoryTest')
)
AND (
`terms`.`type` = 'tag'
AND `terms`.`name` IN('TagTest')
)
表定义:
术语表
+----+--------------+--------------+----------+
|编号 |名称 |蛞蝓|类型 |
+----+--------------+--------------+----------+
| 31 |类别测试 |类别测试 |类别 |
| 32 | 32标签测试 |标签测试 |标签|
+----+--------------+--------------+----------+
帖子表:
+----+--------+---------+--------+------------+---- --------+------------+
|编号 |标题 |内容 |用户 ID |父 ID |创建于 |更新于 |
+----+--------+---------+--------+------------+---- --------+------------+
| 33 | 33你好 | | 0 | 0 |空 |空 |
+----+--------+---------+--------+------------+---- --------+------------+
post_term
+----+---------+---------+
|编号 |帖子 ID |术语 ID |
+----+---------+---------+
| 73 | 73 33 | 33 31 |
| 74 | 74 33 | 33 32 | 32
+----+---------+---------+
最佳答案
您可以简单地检查存在
:
select * from posts p
where
exists(select * from post_term pt join Terms t on pt.term_id = t.id
where pt.post_id = p.id and t.name = 'category') and
exists(select * from post_term pt join Terms t on pt.term_id = t.id
where pt.post_id = p.id and t.name = 'tag')
关于mysql - 如何在查询中检索分组的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41547116/