使用where子句从两个表中进行选择查询。

时间:2013-05-03 08:05:15

标签: php mysql

我有两个变量$code$name$code probably have tutor's code or institute's code and $ name也可能有导师姓名或学院名称。

这就是名称来$code$name

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

我的问题是我需要根据此contact$code$name表中获取电子邮件地址。需要检查属于代码和名称的两个表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 个答案:

答案 0 :(得分: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

请注意,如果两个表上都存在两条记录,则会返回重复记录,因为ALL中指定了UNION。如果您只想获取唯一记录,请删除ALL

答案 1 :(得分:0)

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

答案 2 :(得分: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
      )";