2016-03-06 53 views
-1

我有一个表具有字段即。如何为此创建子查询

id,is_public,added_by,is_delete 

方案possiblities:

当前用户可以看到有记录:

  1. added_by admin = 0 OR own id
  2. added_by another user AND is_public = 1
  3. **is_deleted=0**

current user's and admin's record is_public='0'记录必须

SQLFIDDLE

我的查询:

SELECT * FROM tblname 
WHERE 
is_delete='0' 
AND (added_by='0' OR added_by='15') //ex. current user id = 15 
AND is_public='1' 

但此查询是不是给其他用户的is_public='1'记录

请帮助

+0

如果你喜欢,可以考虑下列行为这个简单的两步过程:1.如果您还没有这样做,提供适当的创建和插入语句(和/或者一个sqlfiddle),这样我们可以更容易地复制这个问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相符的所需结果集。 – Strawberry

+0

@Strawberry,http://sqlfiddle.com/#!9/435b2d/3 – SagarPPanchal

回答

0

我尝试了一些更多得了成功,谢谢大家的支持:)

SELECT * FROM tblname 
WHERE 
is_delete = '0' AND 
(user_id = '0' OR user_id = '15' OR is_public = '1') 
1

您需要使用OR运算到您的选择:

SELECT * FROM tblname 
WHERE 
is_delete='0' AND (
    (added_by='0' OR added_by='15') //ex. current user id = 15 
    OR is_public='1' 
) 

如果用户看到任何自己的记录被删除或者没有,那么你可以使用这个SQL:

SELECT * FROM tblname 
WHERE 
added_by='15' //ex. current user id = 15 
OR (
    is_delete='0' AND (added_by='0' OR is_public='1') 
); 
+0

语法错误! '和( 或(added_by ='0'' – SagarPPanchal

+0

并删除OR后的括号内,它没有显示当前用户记录有'is_public = 0' – SagarPPanchal

+0

对不起,我忘记删除多余的OR,而用第一个替换AND –

1

如何:

SELECT * FROM tblname 
WHERE 
is_delete='0' AND (
(added_by='0' OR added_by='15') //ex. current user id = 15 
OR is_public='1') 

这样,你只显示undleted职位,分别是:来自同一用户或公众

更新: 如果你想显示当前用户删帖以及(因此受到用户的所有帖子0/14,只有公众,而不是删帖由其他用户:

SELECT * FROM temp 
WHERE 
(
    (user_id='0' OR user_id='15') OR 
    (is_delete='0' AND is_public='1') 
) 
+0

'当前用户的is_public ='0''记录必须显示 – SagarPPanchal

+0

它是:在哪里说“由用户或公众” – SimSimY

+0

它不是显示,当前用户的非公开记录意味着有'is_public ='0'' – SagarPPanchal