我正在尝试使用多个过滤器来获取帖子,我的数据库如下,
“元”表
ID | 元键 | 元值 | 对象名称 | 对象 ID |
---|---|---|---|---|
2 | 地点 | 新城市 | 邮政 | 2 |
1 | 帖子类型 | 部分 | 邮政 | 2 |
“帖子”表
ID | 标题 | 摘抄 | 描述 | mime _type |
地位 | 父母 | 帖子 类别 |
日期时间 | 排序 _id |
作者 _id |
---|---|---|---|---|---|---|---|---|---|---|
2 | 测试 | -1 | 邮政 | 2021-04-12 03:06:06 | 0 | 0 | ||||
1 | 测试帖子 | 一些描述 | 积极的 | -1 | 邮政 | 2021-04-12 12:09:32 | 0 | 1 |
SELECT p.id,90p.title
FROM posts p
LEFT JOIN meta m
ON p.id = m.object_id and m.object_name='post'
WHERE m.meta_key='location' and m.meta_value='new city'
and m.meta_key='post_type' and m.meta_value='section'
group by p.id
我尝试了上述 SQL,但问题是我无法形成正确的条件语句,我需要获取所有具有元键“帖子类型”且值为“部分”以及元键“位置”且值为“新城市”的帖子。
但此查询确实适用于单一过滤器。
SELECT p.id,90p.title
FROM posts p
LEFT JOIN meta m
ON p.id = m.object_id and m.object_name='post'
WHERE m.meta_key='location' and m.meta_value='new city'
group by p.id
答案1
SELECT p.id, p.title
FROM posts p
JOIN meta m ON p.id = m.object_id
WHERE m.object_name='post'
AND (m.meta_key, m.meta_value) IN ( ('location', 'new city'),
('post_type', 'section') )
GROUP BY p.id, p.title
HAVING COUNT(DISTINCT m.id) = 2