你好,我有这个功能:
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;
}
首先,我想知道如何通过仅使用一个查询来缩短它,第二件事是,为什么在使用两个查询时这不起作用?两个表具有不同的结构。在表1中,字段电子邮件为否。 16,在table2上它是字段6。
非常感谢。
最佳答案
首先,您在最后几行中犯了一个逻辑错误*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()
函数为您提供最高效的行计数方式。
关于php - 如何缩短函数查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163637/