2013-05-03 128 views
-1

我有两个变量$code$name$code probably have tutor's code or institute's code and $ name也可能有导师姓名或学院名称。使用where子句从两个表中进行选择查询。

这是什么名字来$code$name

// Check Tutor or Institute 
if ($tutorCode && $tutorName) { 
    $code = $tutorCode; 
    $name = $tutorName; 
} elseif ($instituteCode && $instituteName) { 
    $code = $instituteCode; 
    $name = $instituteName; 
} 

我的问题是我需要根据这个$code$namecontact表中获取电子邮件地址。需要检查属于代码和名称的两个表tutorinstitute

tutorinstitute表有contact_idcontact表也有contact_idtutor表有tutor_codetutor_name
institute表有institute_codeinstitute_name

我想是这样的。但无法检查两个表格。

$q = "SELECT email FROM tutor 
     WHERE tutor_code = $code AND tutor_name = $name" 

希望有人能帮助我。 谢谢。

回答

3

可以UNION两个表

SELECT email, code, name 
FROM 
(
    SELECT email, tutor_code as code, tutor_name as Name FROM tutor 
    UNION ALL 
    SELECT email, institute_code as code, institute_name as Name FROM institute 
) sub 
WHERE code = $code AND 
     name = '$name' 

SELECT s.*, c.* 
FROM 
     (
      SELECT contact_ID, 
        tutor_code as code, 
        tutor_name as Name, 
        'TUTOR' sourceTbl 
      FROM tutor 
      WHERE tutor_code = $code AND 
        tutor_name = '$name' 
      UNION ALL 
      SELECT contact_ID, 
        institute_code as code, 
        institute_name as Name, 
        'INSTITUTE' sourceTbl 
      FROM institute 
      WHERE institute_code = $code AND 
        institute_name = '$name' 
     ) s 
     INNER JOIN contact c 
      ON s.contact_ID = c.contact_ID 

请注意,如果由于在UNION中指定了ALL而两个记录都存在于两张表上,它将返回重复记录。如果您只想获得唯一记录,请删除ALL

+0

电子邮件字段包含在联系表中不在以太教师或学院 – TNK 2013-05-03 08:39:19

+0

看到我更新的答案。 – 2013-05-03 08:42:52

+0

我得到这个错误 - #1054 - 'where子句'中的未知列'code' – TNK 2013-05-03 08:46:32

0

查看您的查询我注意到$ code和$ name值存在问题。 您需要在双引号或单引号内添加$ code和$ name。

0

你应该阅读关于在mysql中使用连接。

http://dev.mysql.com/doc/refman/5.0/en/join.html

并为学院和导师的部分都,你可以使用UNION或连接。 在你的情况下,它会是这个样子:

$q = "SELECT c.email 
     FROM contact c 
     LEFT JOIN tutor t on t.contact_id = c.contact_id 
     LEFT JOIN institute i on i.contact_id = c.contact_id 
     WHERE 
     ( 
      (t.tutor_code = $code AND t.tutor_name = $name) OR 
      (i.institute_code = $code AND i.institute_name = $name) OR 
    )";