Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql中的If语句Select query umer_Php_Mysql - Fatal编程技术网

Php Mysql中的If语句Select query umer

Php Mysql中的If语句Select query umer,php,mysql,Php,Mysql,我想用帖子过滤mysql查询。如果我在post中得到一个特殊值,然后过滤它,如果它在post中得到值'ALL',则显示所有值不过滤。我试过了。它可以工作,但我想在一个查询中处理它 if($_POST['comp']== 'all' && $_POST['cat']== 'all'){ return $this->db->select("SELECT * FROM items order by name"); } if

我想用帖子过滤mysql查询。如果我在post中得到一个特殊值,然后过滤它,如果它在post中得到值'ALL',则显示所有值不过滤。我试过了。它可以工作,但我想在一个查询中处理它

           if($_POST['comp']== 'all' && $_POST['cat']== 'all'){
      return  $this->db->select("SELECT * FROM items order by name");
    }
    if($_POST['comp']!= 'all' && $_POST['cat']!= 'all'){
      return  $this->db->select("SELECT * FROM items where company = '$_POST[comp]' and             category = '$_POST[cat]' order by name");
    } 
    if($_POST['comp']!= 'all'){
      return  $this->db->select("SELECT * FROM items where company = '$_POST[comp]' order by name");
    }
    if($_POST['cat']!= 'all'){
      return  $this->db->select("SELECT * FROM items where category = '$_POST[cat]' order by name");
    }
创建一个变量(数组)来存储过滤规则,然后检查其长度,内爆并附加到查询字符串

例:


如果只想执行一个查询,只需将其更改为If/else语句:

if($_POST['comp']== 'all' && $_POST['cat']== 'all'){
    return  $this->db->select("SELECT * FROM items order by name");
}else if($_POST['comp']!= 'all' && $_POST['cat']!= 'all'){
    return  $this->db->select("SELECT * FROM items where company = '$_POST[comp]' and category = '$_POST[cat]' order by name");
}else if($_POST['comp']!= 'all'){
    return  $this->db->select("SELECT * FROM items where company = '$_POST[comp]' order by name");
}else if($_POST['cat']!= 'all'){
    return  $this->db->select("SELECT * FROM items where category = '$_POST[cat]' order by name");
}

这将只执行一个SQL查询,而不是所有与筛选器匹配的查询。

您迄今为止所做的尝试我的if-else if运行正常,但我希望在一个查询中执行它。如果使用if/else语句,您将只执行一个查询。是的,您明白我的意思,但您可以写下完整的select查询以便我可以执行吗更好地理解它?如果您有更多的规则(可能是默认规则),您应该添加到$where数组中。并且只附加到主查询字符串ex:
$sql='select*from my_table'。$where
这是我所期望的。SQL专家可以确认是否可以使用变量一次性实现这一点。我也很想学习。当你说“一次成功”时,你是什么意思?在我提供的代码中只执行1个SQL查询。你的意思是说你只想用更少的代码,通过定义更少的查询来完成它吗?是的,我们不想对一篇文章使用一个查询,我们只想在一个查询中检查所有的$u文章。阅读答案1 StupidDev与我的方法非常接近。“从项目中选择*并且类别=“$\u POST[cat]”按名称排序”-此查询无效。@ScottHelme感谢您的评论,我已经编辑了查询。您现在可以检查吗?现在可以了。完全检查,然后接受它。非常感谢Sanal K。
    prepare the query like this:
        $query .= "SELECT * FROM items where 1=1"; 
        if($_POST['comp']!= 'all')
        {
          $query .= " and company = '$_POST[comp]'";            
        }
        if($_POST['cat']!= 'all')
        {
          $query .= " and category = '$_POST[cat]'";
        }
         $query .= " order by name";

return  $this->db->select($query);
    prepare the query like this:
        $query .= "SELECT * FROM items where 1=1"; 
        if($_POST['comp']!= 'all')
        {
          $query .= " and company = '$_POST[comp]'";            
        }
        if($_POST['cat']!= 'all')
        {
          $query .= " and category = '$_POST[cat]'";
        }
         $query .= " order by name";

return  $this->db->select($query);