如何缩短功能查询?

时间:2013-03-01 17:38:09

标签: php mysql function

你好,我有这个功能:

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号字段。

非常感谢。

3 个答案:

答案 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专家,因此您的里程可能会有所不同。