2012-01-26 2 views
1

Мой запрос выбирает задачи из базы данных MySQL. Каждая задача имеет идентификатор группы, и если группа равна 0, это частная задача, которую я хочу только вернуть, если задача принадлежит пользователю, выполняющему этот запрос. Надеюсь, что имеет смысл :-)MySQL: ЕСЛИ В ГДЕ?

SELECT t.id, t.title, t.created_by, u.username 
FROM (p_tasks AS t) 
LEFT JOIN p_groups AS g ON t.group_id = g.id 
JOIN p_users AS u ON t.assigned_to_user_id = u.id 
WHERE 
(
    t.assigned_to_user_id = $user_id OR 
    t.owner_user_id = $user_id 
) 
AND 
(
    g.priority >= '10' OR 
    t.group_id = 0 
) 
AND 
(
    t.status != "approved" AND 
    t.status != "closed" 
) 
ORDER BY c.name 

Как я могу вернуть задачи с group_id = 0 только для тех, кто создал задачи?

ответ

0

Я не полный understud, что вы имеете в виду, но, как и в английском, ясный синтаксисе:

where 
(... AND ... AND ...) 
or 
(... AND ... AND ...) 
or 
(... AND ... AND ...) 
1
(group_id <> 0 OR t.owner_user_id = $user_id) AND 
t.assigned_to_user_id = $user_id AND 
t.status <> "approved" AND 
t.status <> "closed" 

Вы должны быть в состоянии построить свой ИНЕК без использования оператора IF.

1

Не уверен, что я полностью понимаю ваш запрос, но часть, которую вы описали, будет выглядеть примерно так. Это предполагает, что вы хотите, чтобы все публичные задачи и все частные были назначены пользователю или принадлежали пользователю.

WHERE 
( 
    (t.assigned_to_user_id = $user_id OR t.owner_user_id = $user_id) AND 
    t.group_id = 0 
) 
OR 
( 
    t.group_id != 0  
) 
0
SELECT t.id, t.title, t.created_by, u.username 
FROM (p_tasks AS t) 
LEFT JOIN p_groups AS g ON t.group_id = g.id 
JOIN p_users AS u ON t.assigned_to_user_id = u.id 
WHERE 
(
    t.assigned_to_user_id = $user_id OR 
    t.owner_user_id = $user_id 
) 
AND 
(
    g.priority >= '10' OR 
    t.group_id = 0 
) 
AND 
(
    t.status != "approved" AND 
    t.status != "closed" 
) 
AND 
(
    (
      t.group_id <> 0 
    ) 
    OR 
    (
    t.created_by = $user_id 
    ) 
) 

ORDER BY c.name 
0

Спасибо всем! Кажется, я понял.

Когда я удаляю t.group_id = 0 это, кажется, что я хочу :-) Если я владелец я выбираю задачу owner_user_id или assigned_to_user_id. Если это не так, неважно, является ли задача частной (group_id = 0), потому что у меня недостаточно привилегий для ее выбора/просмотра.

Я попробую это завтра.

Еще раз спасибо за помощь!

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