FIND_IN_SET在codeigniter中的查询中自动添加IS NULL,还需要在我的查询中添加括号以创建组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FIND_IN_SET在codeigniter中的查询中自动添加IS NULL,还需要在我的查询中添加括号以创建组相关的知识,希望对你有一定的参考价值。

这就是我在查询中使用FIND_IN_SET的方式,它在查询中自动添加IS NULL,并且还需要在WHERE之后添加括号s.cat_id ='11'并且查询

$spilt=explode(',',$newstyle);

foreach ($spilt as $splitkey => $splitvalue) {
    if ($splitkey == 0) {
        $this->db->where("FIND_IN_SET(".$splitvalue.",w_card_style)");
    }
    else{
        $this->db->or_where("FIND_IN_SET(".$splitvalue.",w_card_style)");
    }
}

当我使用$this->db->last_query()打印查询时,它提供了类似的查询

SELECT `c`.`city_name`, `s`.`name`, `s`.`location`, `s`.`starting_price`, `s`.`budget_range`, `s`.`cat_id`, `s`.`id`, `i`.`path`, `s`.`specification_status`, `s`.`per_unit_charge`, `s`.`w_card_style`, `s`.`w_card_style`, `s`.`budget_range` FROM `image_gallery` as `i` JOIN `specification` as `s` ON `i`.`ser_id`=`s`.`id` JOIN `cities` as `c` ON `c`.`city_id`=`s`.`location` JOIN `wcard_style` as `ws` ON `ws`.`id`=`s`.`w_card_style` WHERE `s`.`cat_id` = '11' AND FIND_IN_SET(1,w_card_style) IS NULL OR FIND_IN_SET(2,w_card_style) IS NULL OR FIND_IN_SET(3,w_card_style) IS NULL AND budget_range BETWEEN 50 AND 100 GROUP BY `ser_id` HAVING `cat_id` = '11' ORDER BY `s`.`budget_range` DESC

在每个FIND_IN_SET之后都有IS NULL,那么如何从Query中删除IS NULL,还需要在运行时“WHERE s.cat_id ='11'AND”之后添加括号

SELECT `c`.`city_name`, `s`.`name`, `s`.`location`, `s`.`starting_price`, `s`.`budget_range`, `s`.`cat_id`, `s`.`id`, `i`.`path`, `s`.`specification_status`, `s`.`per_unit_charge`, `s`.`w_card_style`, `s`.`w_card_style`, `s`.`budget_range` FROM `image_gallery` as `i` JOIN `specification` as `s` ON `i`.`ser_id`=`s`.`id` JOIN `cities` as `c` ON `c`.`city_id`=`s`.`location` JOIN `wcard_style` as `ws` ON `ws`.`id`=`s`.`w_card_style` WHERE `s`.`cat_id` = '11' AND (FIND_IN_SET(1,w_card_style) IS NULL OR FIND_IN_SET(2,w_card_style) IS NULL OR FIND_IN_SET(3,w_card_style) IS NULL ) AND budget_range BETWEEN 50 AND 100 GROUP BY `ser_id` HAVING `cat_id` = '11' ORDER BY `s`.`budget_range` DESC`enter code here`
答案

试试这段代码,我修改了你的代码并进行了一些修改。使用我的下面的代码就可以了。

$spilt=explode(',',$newstyle);
          foreach ($spilt as $splitkey => $splitvalue) {
            if ($splitkey == 0) {
            $this->db->where("FIND_IN_SET(".$splitvalue.",w_card_style)!=",0);
            }
            else{
              $this->db->or_where("FIND_IN_SET(".$splitvalue.",w_card_style)!=",0);
            }
          }

以上是关于FIND_IN_SET在codeigniter中的查询中自动添加IS NULL,还需要在我的查询中添加括号以创建组的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter $this->db->where() 函数 concat "IS NULL" 在使用 find_in_set() 函数时自动查询

mysql中的find_in_set()函数

mysql中的find_in_set()函数

MySql 中的 FIND_IN_SET 的使用和相关问题

MYSQL 查询不适用于 where 或 FIND_IN_SET 中的希腊词

mysql 使用 FIND_IN_SET 来查询数据