我有三个表,我想看看其中任何一个是否存在一行。
这是我的三个问题。我怎样才能将它们组合成一个?
$dbh->prepare("SELECT id FROM users WHERE email = :email");
$dbh->prepare("SELECT id FROM employees WHERE email = :email");
$dbh->prepare("SELECT id FROM teachers WHERE email = :email");
if(!$row) { // If row not found
// continue with registration
}
您可以使用UNION
查询。如果用户在多个表中具有不同的id
值,则这将返回多行,但由于您只需要知道是否存在一行或多行。
SELECT id FROM users WHERE email = :email
UNION
SELECT id FROM employees WHERE email = :email
UNION
SELECT id FROM teachers WHERE email = :email
或者,您可以使用EXISTS
表达式从查询中获得简单的是/否结果:
SELECT EXISTS (SELECT * FROM users WHERE email = :email)
OR EXISTS (SELECT * FROM employees WHERE email = :email)
OR EXISTS (SELECT * FROM teachers WHERE email = :email)
如果您有兴趣知道电子邮件地址所在的表,您可以修改UNION
查询以返回该信息:
SELECT 'users' AS `table`, id FROM users WHERE email = :email
UNION
SELECT 'employees', id FROM employees WHERE email = :email
UNION
SELECT 'teachers', id FROM teachers WHERE email = :email