2013-02-11 65 views
0

我试图根据login_id从3个表中获取用户名和他/她的code_number。我有4个名为登录,导师,研究所和学生的表格。从MYSQL中的3个表中选择数据

这是我的表格结构。

登录表
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上,然后我需要检查哪种用户已经登录,并且在识别用户之后需要登录用户的姓名和代码。

我的问题是我如何检查哪个用户(在这种情况下,导师,学院,学生)已登录到网站,我如何得到它的名称和代码?

希望有人帮我解决这个问题... 谢谢。

回答

2

如果你想返回namecode,那么你可以在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将返回第一个非空值。如果登录只能属于其中一个表格,那么即使用户是tutorinstitutestudent,使用此将返回正确的值。

如果你想在单独的列返回这一点,那么你可以使用:

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 2013-02-11 16:39:33

+0

@TharangaNuwan它真的取决于你需要什么。如果你只想要一列名称,那么使用'COALESCE'版本,否则使用其他。除了要返回的列之外,它们都是相同的。 :) – Taryn 2013-02-11 16:40:55

+0

是的,如果你有更多关于答案的问题。 – Taryn 2013-02-11 16:48:20

2

这里有一种方法通过检查LOGIN_TYPE与CASE做到这一点:

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 2013-02-11 16:41:59

+0

@TharangaNuwan - 没问题 - CASE基本上可以像IF或ELSE IFSE ELSE一样工作......希望它有所帮助。祝你好运。 – sgeddes 2013-02-11 16:43:15

+0

@sgeddes ..我可以有这种问题的CASE解决方案 - http://stackoverflow.com/questions/14824791/how-do-i-modify-this-select-query-in-mysql – TNK 2013-02-12 04:06:29