2011-12-17 3 views
1

Я спросил это уже однажды, но пришлось normailze даже иметь шанс на выяснить этоMySQL присоединиться к условиям

Я застрял на запросе. Супервизор (id of 7 позволяет сказать) отправляет задание в таблицу рабочих мест. когда он публикует его, он устанавливает групповой уровень 0-4 для этой публикации ... все, что содержится в таблице рабочих мест. теперь я хочу отобразить их на странице

Если задание релевантно_группы установлено на 0, каждому разрешено его видеть. если задание релевантной_группы не установлено равным 0, нам необходимо захватить сеанс просмотра employee_id и использовать его для проверки того, находятся ли они в одной из групп этого супервизора

, поэтому, если сотрудник вошел в систему, а его идентификатор в одной из записей группы для этого супервизора ... Затем я хочу отобразить этот список вакансий. работник может быть в других группах с другими руководителями, но я только хочу, чтобы показать работу, если они находятся в группе, размещенной job_lister_id в job_lister_id в таблице заданий и supervisor_id в таблице группы были бы соответствующими поля соответствия

jobs table 
job_listing (text I want displayed in this field) 
job_lister_id (int same as supervisor_id in table below) 
relevant_group (enum 0,1,2,3,4) 

groups table 
supervisor_id (int same as job_lister_id in table above) 
group_number (data will either be 1,2,3 or 4) 
employee_id (int id number of employee) 

так что теперь мне нужно повторить все записи

SELECT * FROM jobs 
    - if relevant_group == 0, go ahead and echo that one 
    - if relevant_group != 0 
    - I need to see if the users session id is in a record for the supervisor for that group in groups table 
    - if it is echo it, else skip it 

ответ

0

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

Ваш первый «IF» был довольно прост: у меня есть WHERE, чтобы проверить, является ли релевантная_группа нулевой. Вы заявили, что хотите получить информацию о группе только в том случае, если соответствующая_группа не равна нулю, поэтому я решил, что объединение LEFT было бы более подходящим (предполагая, что в таблице «groups» нет нулевой строки с номером group_number).

Ваш второй «IF» не имеет для меня большого смысла: «идентификатор сеанса пользователей находится в записи для супервизора для этой группы в таблице групп». Но я видел это требование: «job_lister_id (int same supervisor_id в таблице ниже)» и предположил, что это то, что вы хотели проверить. «SELECT *» с «LEFT JOIN» в этом случае вернет g.employee_id в результирующий набор.

SELECT * 
FROM jobs j 
LEFT JOIN groups g ON g.group_number = j.relevant_group 
WHERE j.relevant_group = 0 
OR (g.supervisor_id = j.job_lister_id AND g.employee_id = :employee_id) 

Попробуй возиться с этим и посмотри, поможет ли это вам начать. Если вам нужна дополнительная помощь, отредактируйте свой пост с помощью SQL, который вы пробовали, и результат, который вы видите.

+0

Bryce, ваш SQL-идентификатор ID активного пользователя – Richard

+0

Проверьте. Я добавил employee_id как переменную связывания. – Aaron

+0

ahhhh! Ты, ты, это то, что мне нужно. Я также должен был изменить мои соответствующие_группы из перечисления, поскольку он не будет работать должным образом, –

0

Не совсем уверен, что вы хотите, но я думаю, что вы ищете SQL?

Я думаю, что было бы лучше иметь 2 запросов, 1 для зарегистрированных пользователей и 1 для не вошли в

Помнить:.

SELECT j.* 
     FROM jobs j 
INNER JOIN groups g ON g.group_number = j.relevant_group 
    WHERE g.employee_id = 123 #Pull this from somewhere 
     OR relevant_group = 0 

Вам нужно будет добавить пользователей идентификатор в SQL выше

не вошли в

SELECT * 
     FROM jobs 
    WHERE relevant_group = 0 

Именование таблиц и столбцов не слишком хорошо.

+0

да, запрос.не уверен, как добавить в чек, если номер группы равен 0, нет нулевой группы, поэтому я хочу, чтобы это всегда было эхом. –

+0

Я отредактировал свой ответ выше – Richard

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