Php codeigniter忽略搜索查询的一部分

Php codeigniter忽略搜索查询的一部分,php,mysql,codeigniter,search,Php,Mysql,Codeigniter,Search,我发现自己对这个特定的codeigniter MySQL查询有问题 我试图搜索我的数据库行,其中3个字段/列中的任何一个包含与搜索字符串相同的短语,但“状态”不能标记为“已删除” 我首先尝试: $this->db->where('status !=', 'deleted'); $this->db->like('meta_title', $string); $this->db->or_like('name', $string); $this->db->

我发现自己对这个特定的codeigniter MySQL查询有问题

我试图搜索我的数据库行,其中3个字段/列中的任何一个包含与搜索字符串相同的短语,但“状态”不能标记为“已删除”

我首先尝试:

$this->db->where('status !=', 'deleted');
$this->db->like('meta_title', $string);
$this->db->or_like('name', $string);
$this->db->or_like('text_full', $string);
但它只是完全忽略了meta_title字段,根本不会比较或查看“meta_title”。然后,我根据其他人的stackexchange问题尝试了以下操作,它修复了该问题,但现在它忽略了:

WHERE `status` != 'deleted'
我的代码

$rows = $this->db->query("SELECT * FROM `categories` WHERE `name` LIKE '%$string%' OR `meta_title` LIKE '%$string%' OR `slug` LIKE '%$string%' OR `text_full` LIKE '%$string%' AND `status` != 'deleted' ")->result_array();

var_dump($rows); 
echo $this->db->last_query(); die();
这将返回所有行,甚至是标记为已删除的行

我也试过不用背虱,我也试过了

`status` NOT LIKE 'deleted'
像这样

$rows = $this->db->query("SELECT * FROM `categories` WHERE `name` LIKE '%$string%' OR `meta_title` LIKE '%$string%' OR `slug` LIKE '%$string%' OR `text_full` LIKE '%$string%' AND `status` NOT LIKE 'deleted' ")->result_array();
结果

echo $this->db->last_query(); die();
是:

我还试着把
状态
!='已删除查询开始处的“”

我不是很精通web开发,但是我已经解决了这个问题,不幸的是,我已经到了需要帮助才能理解我做错了什么的地步


当SQL谓词中有
运算符时,请使用。基本上,你的声明说

“我需要未删除的行或与我的其他条件匹配的行。”

您需要将可选条件用括号括起来,以便将它们与所有行上所需的条件分开:

SELECT * 
FROM `categories` 
WHERE `status` != 'deleted'
AND (`meta_title` LIKE '%$string%' 
      OR `slug` LIKE '%$string%' 
      OR `text_full` LIKE '%$string%'
      OR `name` LIKE '%$string%');

@问一问,不客气。如果这有帮助,那么为什么不接受正确的答案呢
SELECT * 
FROM `categories` 
WHERE `status` != 'deleted'
AND (`meta_title` LIKE '%$string%' 
      OR `slug` LIKE '%$string%' 
      OR `text_full` LIKE '%$string%'
      OR `name` LIKE '%$string%');