mysql选择查询问题,其中id在()

时间:2013-01-10 10:03:52

标签: php mysql

我的网站上有过滤器。 我有多个复选框来显示来自不同网站的产品。 如果用户选择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();

你们是天才。

提前感谢。

6 个答案:

答案 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}";
}