在我的查询中摆脱工会…两个相似的选择有一个不同的条件


getting rid of union on my query ... two similar select with one different condition

假设有一个社交网络,我想显示我的登录用户的群组/朋友/家庭成员的最新活动

我在registry表中有所有活动,每个活动有3个不同的级别

0 => every one can see it
1 => only friends or in case of group, members can see it
2 => only family members can see it 

我也有2个数组包含登录用户friends_groups AND family

select * from registry where user_id in (implode(',' ,  $groups_friends_array) ) && level < 2 
union
select * from registry where user_id in (implode(',' ,  $family_array) ) && level < 3

有没有办法在不使用联合的情况下做到这一点?

您可以使用OR合并两个WHERE子句

SELECT...
FROM...
WHERE  (user_id in (implode(',' ,  $groups_friends_array)) AND level < 2) OR
       (user_id in (implode(',' ,  $family_array)) AND level < 3)
select * from registry 
where 
(
  user_id in (implode(',' ,  $groups_friends_array) ) and level < 2
)
or
(
  user_id in (implode(',' ,  $family_array) ) and level < 3
)