你好,我有这个功能:
function mail_exists($email){
global $db;
$email = sanitize($email);
$query = $db->query("SELECT Email FROM table1 WHERE Email= '$email' ");
$check = $query->num_rows;
$query2 = $db->query("SELECT Email FROM table2 WHERE Email= '$email' ");
$check2 = $query->num_rows;
return ($check > 0 || $check2 > 0) ? true : false;
}
首先,我想知道如何通过仅使用一个查询来缩短它,第二个问题是,为什么在使用两个查询时这不起作用?两个表都有不同的结构。在table1中,字段电子邮件是否定的。 16,在表2上,它是第6号字段。
非常感谢。
答案 0 :(得分:2)
首先,您在最后一行中犯了一个逻辑错误*here
:$query->num_rows;
应该是:$query2->num_rows;
然后导致:
function mail_exists($email){
global $db;
$email = sanitize($email);
$query = $db->query("SELECT Email FROM table1 WHERE Email= '$email' ");
$check = $query->num_rows;
$query2 = $db->query("SELECT Email FROM table2 WHERE Email= '$email' ");
$check2 = $query2->num_rows; // *here
return ($check > 0 || $check2 > 0) ? true : false;
}
其次,如果要处理两个完全不同的上下文,则应该使用两个不同的查询。如果您不需要,请不要加入查询。如果您只是计算行数,则可以轻松完成:
function mail_exists($email){
global $db;
$email = sanitize($email);
$query = $db->query("SELECT COUNT(*) FROM table1 WHERE Email= '$email' ");
$query2 = $db->query("SELECT COUNT(*) FROM table2 WHERE Email= '$email' ");
$count1 = $query->fetch_row();
$count2 = $query2->fetch_row();
return ($count1[0] || $count2[0]);
}
SQL COUNT()
函数可以为您提供最高效的行计数方法。
答案 1 :(得分:0)
使用UNION ALL
可以返回总计数:
SELECT Email
FROM (
SELECT Email FROM table1 WHERE Email= '$email'
UNION ALL
SELECT Email FROM table2 WHERE Email= '$email') t
或者您可以使用SELECT COUNT(Email)
返回计数。
答案 2 :(得分:0)
您可以尝试:
SELECT t1.Email from table1 t1 inner join table2 t2 on t2.Email=t1.Email WHERE t1.Email = '$email'
然后:
return $query->num_rows > 0;
我不是PHP专家,因此您的里程可能会有所不同。