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

时间:2015-03-10 22:35:28

标签: 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->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();

是:

SELECT * FROM `categories` WHERE `name` LIKE '%buyer%' OR `meta_title` LIKE '%buyer%' OR `slug` LIKE '%buyer%' OR `text_full` LIKE '%buyer%' AND `status` != 'deleted' 

我还尝试在查询开头放置WHERE status!='已删除'

我不是非常精通网络开发,但我已经玩过这个问题,不幸的是我已经达到了需要帮助才能理解我做错的地方。

1 个答案:

答案 0 :(得分:0)

当你在SQL谓词中有OR运算符时,事情变得愚蠢。基本上,你的陈述说,

  

"我想要未删除的行 - 或 - 与我的其他条件匹配的行。"

您需要在括号中包含可选条件,以将它们与所有行所需的条件分开:

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