mysql - 如何在查询中检索分组的结果

标签 mysql

我想使用以下查询从我的 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/

相关文章:

mysql - SQL 查询 - 匹配字符串的任何部分

mysql - Spring Data 似乎不理解@Column 名称

php - Doctrine 中的日期格式

php - 如何查看我的 IP 地址?

php strtotime 用三个栏来检查 sql 中状态的更改

mysql - 如何给用户添加积分行?

mysql - 子查询以收集具有限制的分组子集

MySQL 触发器以防止输入重复记录

php - 如何在此查询中使用 LEFT JOIN

java - 使用 Hibernate 注释将外部键作为主键的一部分