使用where子句从两个表中进行选择查询。
问题描述:
我有两个变量$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
和$name
从contact
表中获取电子邮件地址。需要检查属于代码和名称的两个表tutor
和institute
。
tutor
和institute
表有contact_id
和contact
表也有contact_id
。 tutor
表有tutor_code
和tutor_name
。 institute
表有institute_code
和institute_name
我想是这样的。但无法检查两个表格。
$q = "SELECT email FROM tutor
WHERE tutor_code = $code AND tutor_name = $name"
希望有人能帮助我。 谢谢。
答
可以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
。
答
查看您的查询我注意到$ code和$ name值存在问题。 您需要在双引号或单引号内添加$ code和$ name。
答
你应该阅读关于在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
)";
电子邮件字段包含在联系表中不在以太教师或学院 – TNK 2013-05-03 08:39:19
看到我更新的答案。 – 2013-05-03 08:42:52
我得到这个错误 - #1054 - 'where子句'中的未知列'code' – TNK 2013-05-03 08:46:32