2009-09-12 46 views
0

有人可以帮助我如何添加几个不同的查询与一个查询与或?MySQL执行几个查询或

我有一些帖子,我只想向用户显示允许看到它或允许看到它或每个人的组。

SELECT p.*, c.name, cb.categoryId FROM Posts AS p 
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id 
LEFT JOIN Categories AS c ON c.id = cb.categoryId 
LEFT JOIN UserBindings AS ub ON ub.postId = p.id 
WHERE ub.userId = 1 

SELECT p.*, c.name, cb.categoryId FROM Posts AS p 
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id 
LEFT JOIN Categories AS c ON c.id = cb.categoryId 
LEFT JOIN GroupPostBindings AS gpb ON gpb.postId = p.id 
LEFT JOIN GroupBindings AS gp ON gp.groupId = gpb.groupId 
WHERE gp.userId = 1 

SELECT p.*, c.name, cb.categoryId FROM Posts AS p 
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id 
LEFT JOIN Categories AS c ON c.id = cb.categoryId 
WHERE p.public = 1 

如何将这三个查询添加到一个查询中?

回答

3
SELECT p.*, c.name, cb.categoryId FROM Posts AS p 
LEFT JOIN CategoryBindings AS cb ON cb.postId = p.id 
LEFT JOIN Categories AS c ON c.id = cb.categoryId 
LEFT JOIN UserBindings AS ub ON ub.postId = p.id 
LEFT JOIN GroupPostBindings AS gpb ON gpb.postId = p.id 
LEFT JOIN GroupBindings AS gp ON gp.groupId = gpb.groupId 
where p.public = 1 or ub.userId = 1 or gp.userId = 1 

应该工作,假设你的加入将始终返回一个值(0或1它似乎),并且不排除行

+0

它的工作就像一个魅力。我相信所有的联合会让我觉得这会比实际困难得多,然后它变得如此简单,即使提出这个问题我也觉得很愚蠢。谢谢。 – unkownt 2009-09-12 10:26:48

1

你看过使用UNION吗?无可否认,这可能是一种更高效的方式 - 这只是首先想到的。