channel_data table
-------------
entry_id
content
channel_title table
-------------
entry_id
title
category_posts table
-------------
entry_id
category_id
category_posts的样本数据
entry_id cat_id
2 10
2 11
2 30
2 40
3 10
3 11
我需要能够查询数据,以便我可以说返回具有多个类别的数据。我尝试了几种不同的方法,但到目前为止无法解决这个问题。我确信这很简单,所以希望有人可以提供帮助。
这是我得到的地方,但无法弄清楚在where子句中我需要什么才能使它工作。如果我只需要一个类别它可以工作但是有2个它没有。
SELECT distinct a.entry_id, b.title
FROM exp_channel_data as a
LEFT JOIN exp_channel_titles as b
ON a.entry_id = b.entry_id
LEFT JOIN exp_category_posts as c
ON a.entry_id = c.entry_id
WHERE c.cat_id = 10 and c.cat_id = 30
答案 0 :(得分:0)
您可以使用以下查询,以使entry_id
值与 cat_id
值相关联:
SELECT entry_id
FROM category_posts
WHERE cat_id IN (10, 30)
GROUP BY entry_id
HAVING COUNT(DISTINCT cat_id) = 2
现在,您可以将上述查询用作派生表,并使用JOIN
来获取预期结果:
SELECT distinct a.entry_id, b.title
FROM exp_channel_data as a
LEFT JOIN exp_channel_titles as b ON a.entry_id = b.entry_id
LEFT JOIN (
... above query here
) AS c ON a.entry_id = c.entry_id