2013-02-11 3 views
0

Я пытаюсь сделать запрос, чтобы получить имя пользователя и его/ее номер_кода из 3 таблиц в соответствии с login_id. У меня есть 4 таблицы с именем login, репетиторы, институты и студенты.Выбор данных из 3 таблиц в MYSQL

Это структура моих таблиц.

Войти стол
login_id
login_type

Репетитор стол
tutor_id
login_id
tutor_name
tutor_code

институт стол
institute_id
login_id
institute_name
institute_code

студент стол
student_id
login_id
student_name
student_code

Когда пользователь зарегистрировался на сайте login_id, сохраните его на SESSION, а затем мне нужно проверить, какой пользователь вошел в систему и после идентификации пользователя, тогда вам нужно войти в систему под именем пользователя и кодом.

Моя проблема заключается в том, как я проверяю, какой пользователь (в случае Tutor, институт, студент) зашел на сайт и как я могу получить его имя и код?

Надеюсь, что кто-нибудь мне поможет об этом ... Спасибо.

ответ

2

Если вы хотите вернуть name и code, то вы можете просто JOIN на таблицах. Ваш запрос будет похож на этот:

select l.login_id, 
    l.login_type, 
    coalesce(t.tutor_name, i.institute_name, s.student_name) Name, 
    coalesce(t.tutor_code, i.institute_code, s.student_code) Code 
from login l 
left join tutor t 
    on l.login_id =t.login_id 
left join institute i 
    on l.login_id = i.login_id 
left join student s 
    on l.login_id = s.login_id 

COALESCE возвратит первое ненулевое значение. Если логин может принадлежать только в одной из таблиц, то использование этого параметра вернет правильное значение, даже если пользователь является tutor, institute или student.

Если вы хотите, чтобы вернуть это в отдельных колонках, то вы можете использовать:

select l.login_id, 
    l.login_type, 
    t.tutor_name, 
    t.tutor_code, 
    i.institute_name, 
    i.institute_code, 
    s.student_name, 
    s.student_code 
from login l 
left join tutor t 
    on l.login_id =t.login_id 
left join institute i 
    on l.login_id = i.login_id 
left join student s 
    on l.login_id = s.login_id 
+0

Спасибо за ваш ответ. оба вопроса работают для меня. могу ли я узнать, какой из них наиболее подходит. Я никогда не использовал «COALESCE» в моем предыдущем вопросе. – TNK

+0

@TharangaNuwan это действительно зависит от того, что вам нужно.Если вам нужен только один столбец с именем, используйте версию «COALESCE», иначе используйте другую. Оба они одинаковы, за исключением возвращаемых столбцов. :) – Taryn

+0

да, если у вас есть больше вопросов о ответе. – Taryn

2

Вот один из способов сделать это с CASE, проверяя Login_Type:

SELECT 
    CASE Login_Type 
     WHEN 'Tutor' THEN Tutor_Name 
     WHEN 'Institute' THEN Institute_Name 
     WHEN 'Student' THEN Student_Name 
    END Name, 
    CASE Login_Type 
     WHEN 'Tutor' THEN Tutor_Code 
     WHEN 'Institute' THEN Institute_Code 
     WHEN 'Student' THEN Student_Code 
    END Code 
FROM Login L 
    LEFT JOIN Tutor T ON L.Login_Id = T.Login_Id 
    LEFT JOIN Institute I ON L.Login_Id = I.Login_Id 
    LEFT JOIN Student S ON L.Login_Id = S.Login_Id 

удачи.

+0

Благодарим вас за ответ. «CASE» совершенно новый для меня в выбранном запросе – TNK

+0

@TharangaNuwan - не проблема - CASE в основном работает, как ЕСЛИ ЕСЛИ ЕСЛИ ЕЩЕ ... Надеюсь, это помогло. Удачи. – sgeddes

+0

@sgeddes .. могу ли я найти решение с этим вопросом - http://stackoverflow.com/questions/14824791/how-do-i-modify-this-select-query-in-mysql – TNK

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