如果变量$ 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中的所有行。
答案 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);