0

我的网站上有过滤器。我有多个复选框来显示来自不同站点的产品。如果用户选择 2 个复选框,我的查询变为

Select * from new_deals where provider_id IN (2,8);

它运行良好。

但是当用户不选择任何复选框时,它变成

Select * from new_deals where provider_id IN ();

并给出错误。我在想它应该返回空结果。

任何人都可以帮助我吗?我不想在 provider_id IN (); 中删除此代码

因此,如果未选中任何复选框,则必须有解决方案我们处理此 IN();

所以需要知道如果没有选中任何复选框,我需要放在括号中。即 IN ();

你们是天才。

提前致谢。

4

6 回答 6

11

您正在使用 php,所以这是一个解决方案:

if (isset($_POST['checkboxfieldname']) and count($_POST['checkboxfieldname']) > 0) {
     // run query
} else {
  // dont run query
}
于 2013-01-10T10:09:02.340 回答
1

据我了解,您的问题是如果未选中任何复选框,SQL 将生成错误。

你为什么不使用

NULL

所以如果没有选中复选框,代码应该是

Select * from new_deals where provider_id IN (NULL);

我已经尝试过了,它没有给出任何错误。

谢谢。

于 2013-01-10T10:11:06.410 回答
0

如果 0 是您的数据库中没有的 id,您可以使用 WHERE provider_id IN(0)。这很难看,您应该根本不运行查询。

于 2013-01-10T10:09:25.120 回答
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;

希望这可以帮助。

于 2013-01-10T10:46:33.283 回答
0

如果没有选择任何 ID,最好甚至不运行查询,但有时这是不可能的,或者会导致代码更加混乱。因此,只需将值添加NULL到列表中 -NULL不匹配任何内容(甚至是其他NULLs),因此它比 using0或任何其他可能存在的任意值更合适。

// IDs got from checkboxes
$ids = array("10", "12");

// Add in NULL
$ids[] = "NULL";

$values = implode(",", $ids);
$sql = "Select * from new_deals where provider_id IN ($values)";
于 2015-06-18T11:56:38.407 回答
-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}";
}
于 2013-01-10T10:10:06.403 回答