我的网站上有过滤器。 我有多个复选框来显示来自不同网站的产品。 如果用户选择2个复选框,我的查询将变为
Select * from new_deals where provider_id IN (2,8);
它运行良好。
但是当用户没有选中任何复选框时,它变为
Select * from new_deals where provider_id IN ();
并给出错误。我认为它应该返回空结果。
可以任何身体帮助我我不想删除这个代码,其中provider_id IN();
所以必须有一个解决方案,如果没有选中任何复选框,我们处理这个IN();
所以如果没有选中任何复选框,我需要知道我需要放在括号中.i.e IN();
你们是天才。
提前感谢。
答案 0 :(得分:11)
您正在使用php,所以这是一个解决方案:
if (isset($_POST['checkboxfieldname']) and count($_POST['checkboxfieldname']) > 0) {
// run query
} else {
// dont run query
}
答案 1 :(得分:1)
根据我的理解,如果没有选中复选框,则问题是SQL生成错误。
为什么不使用
NULL
因此,如果没有选中复选框,则代码应为
Select * from new_deals where provider_id IN (NULL);
我试过这个并没有给出任何错误。
感谢。
答案 2 :(得分:0)
如果0是您在数据库中没有的ID,则可以使用WHERE provider_id IN(0)。这很难看,你应该完全没有运行查询。
答案 3 :(得分:0)
使用搜索时请使用此方法。
创建一个变量以包含SQL Query的添加条件。在你的情况下,假设你的请求变量是provider_id。
$QueryAddons = "";
if(isset($_REQUEST['provider_id']) && !empty($_REQUEST['provider_id'])){
$QueryAddons .= "AND provider_id IN ".implode(",",$_REQUEST['provider_id'])."";
}
现在你的查询声明应该是:
$selectStmt = "Select * from new_deals where 1=1 ".$QueryAddons;
希望这有帮助。
答案 4 :(得分:0)
如果没有选择任何ID,最好不要运行查询,但有时这不可能或导致更混乱的代码。因此,只需将值NULL
添加到列表中 - NULL
不匹配任何内容(甚至是其他NULL
),因此它比使用{{1}更合适或者可能存在的任何其他任意值。
0
答案 5 :(得分:-1)
这样做
$delim = "";
$whereCondition = (count($_POST['multiple_check']) > 0) ? " where provider_id IN (" : "";
foreach ($_POST['multiple_check'] as $multipleCheckbox) {
$whereCondition .= $delim.$multipleCheckbox;
$delim = ",";
}
$whereCondition .= (count($_POST['multiple_check']) > 0) ? ")" : "where provider_id IN (NULL)";
if ($whereCondition != "") {
$query = "Select * from new_deals {$whereCondition}";
}