我必须诚实地告诉你我不擅长数据库查询,这个问题可能很简单。
我有三张桌子
Post
ID
entry
Category
ID
name
CategoryBinding
ID
postID
categoryID
我的正常查询是将所有帖子都包含在
中SELECT * FROM `Post` AS `p`
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID
返回的查询类似于:
ID entry ID name ID postID categoryID
1 entry1 1 php 1 1 1
1 entry1 2 asp 1 1 2
2 entry2 1 php 1 2 1
3 entry3 null null null null null
现在我想获取属于特定类别ID的所有帖子,其中包含帖子的所有类别 I.E我希望获得与第一个查询中相同的内容但仅限于属于某个类别的帖子。 现在我只想获得属于asp类别的帖子。那是
ID entry ID name ID postID categoryID
1 entry1 1 php 1 1 1
1 entry1 2 asp 1 1 2
你知道我怎么做吗?
如果有人帮助我,我将非常感激,因为这更像是“为我做的工作”问题。
答案 0 :(得分:3)
SELECT *
FROM `Post` AS `p`
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID
INNER JOIN `Post` AS `p2` ON p.id = p2.id
WHERE p.id in
(
SELECT p2.id
FROM `Post` as `p2`
LEFT JOIN `CategoryBinding` AS `cb` ON p2.ID = cb.postID
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID
WHERE c.id = @SomeCategory
)
好的,最后一枪。
这将返回重复的行,只需添加一个组即可。