如果变量$ whereEmail和$ whereNotEmail为空或null,则sql查询应选择所有行

时间:2016-12-27 11:55:59

标签: php mysql sql mysqli

如果变量$ whereEmail或变量$ whereNotEmail或两者都为空,则以下查询不会选择任何行。

$whereEmail = "'abc@gmail.com','def@hotmail.com'";
$whereNotEmail = "'u2u@xyz.com','u3u@xyz.com'";
$result = $mSearch->dao->query(sprintf('
SELECT * FROM table
WHERE email IN (%s)
AND email NOT IN (%s)
', $whereEmail, $whereNotEmail ));

变量$ whereEmail和$ whereNotEmail中的电子邮件地址使用php函数存储,在某些情况下,它们会保留为空或为空。

我希望如果变量$ whereEmail和$ whereNotEmail都为空,那么查询应该从表中选择所有行。

同样,我希望如果变量$ whereEmail为空,则查询应该选择表中的所有行,除了那些电子邮件地址位于变量$ whereNotEmail中的行。

同样,我希望如果变量$ whereNotEmail为空,则查询应该选择电子邮件地址在变量$ whereEmail中的所有行。

3 个答案:

答案 0 :(得分:0)

//你必须设置whereEmail不为空的where条件以及whereNotEmail希望这可行的

$whereEmail = "'abc@gmail.com','def@hotmail.com'";
$whereNotEmail = "'u2u@xyz.com','u3u@xyz.com'"; 
if($whereEmail != ''){
$result = $mSearch->dao->query(sprintf('
SELECT * FROM table
WHERE email IN (%s)
', $whereEmail ));
}else{
$result = $mSearch->dao->query(sprintf('
SELECT * FROM table
WHERE email NOT IN (%s)
', $whereNotEmail ));
}

答案 1 :(得分:0)

  

我希望变量$ whereEmail和$ whereNotEmail都是   清空查询应该从表中选择所有行。

不,查询了解SQL语言结构而不是PHP,因此您必须检查并做相应的操作。如果我是你,那么将验证列表是否为空。如果为空则然后弹出验证消息,否则可能会将其传递给查询。 (或)如果任何列表为空,那么您也可以从查询中放弃该条件。

答案 2 :(得分:0)

如果我理解正确,您可以尝试以下方法:开始构建一个选择所有行的查询并添加条件,如果这些电子邮件数组不为空

    $whereEmail = array('abc@gmail.com','def@hotmail.com');
    $whereNotEmail = array('u2u@xyz.com','u3u@xyz.com');

    $query = 'SELECT * FROM `table` WHERE 1';
    if(!empty($whereEmail)) {
            $validEmailsString = implode('","', $whereEmail);
            $query .= ' AND email IN ("'.$validEmailsString.'")';
    }

    if (!empty($whereNotEmail)) {
            $invalidEmailsString = implode('","', $whereNotEmail);
            $query .= ' AND email NOT IN ("'.$invalidEmailsString.'")';
    }

    print $query;

    $result = $mSearch->dao->query($query);