2016-03-06 2 views
-1

У меня есть одна таблица с полем, а именно.Как построить подзапрос для этого

id,is_public,added_by,is_delete 

Сценарий: Каковы возможности

текущий пользователь может видеть записи, имеющие:

  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

Вы должны использовать оператор ИЛИ в ваш выбор:

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

Синтаксическая ошибка! 'AND ( OR (added_by = '0'' – SagarPPanchal

+0

и после удаления OR внутри скобки, не показывающий текущую запись пользователей, имеющую' is_public = 0' – SagarPPanchal

+0

извините, я забыл удалить избыток ИЛИ, заменив его первым И –

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 сообщения, которые: от того же пользователя или общественного

Update: Если вы хотите, чтобы показать текущие пользователи удаленные сообщения, а также (так все Сообщения от пользователей: 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

это: где говорится« bytheuser OR public » – SimSimY

+0

его не показывая, что текущий пользователь не является общедоступным, означает 'is_public = '0'' – SagarPPanchal

Смежные вопросы