MySQL: ЕСЛИ в ГДЕ? - PullRequest
       17

MySQL: ЕСЛИ в ГДЕ?

1 голос
/ 26 января 2012

Мой запрос выбирает задачи из БД MySQL.Каждое задание имеет идентификатор группы, и если группа равна 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"
 )
ORDER BY c.name

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

Ответы [ 5 ]

2 голосов
/ 26 января 2012

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

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    
 )
1 голос
/ 26 января 2012
(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"

Вы должны быть в состоянии составить свое предложение where без использования оператора IF.

0 голосов
/ 27 января 2012

Спасибо всем! Я думаю, что я знаю это.

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

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

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

0 голосов
/ 26 января 2012
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 голосов
/ 26 января 2012

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

where 
(... AND ... AND ...)
or
(... AND ... AND ...)
or
(... AND ... AND ...)
...