我正在使用ActiveRecord生成如下查询
SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND `tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%'
和的数量tags未知。数组是动态创建的。下面我添加了一个可能的数组。
tags
$tags = array ( '0' => 'green'. '1' => 'blue', '2' => 'red' );
具有一个标签数组,我使用以下循环创建我发布在顶部的查询。
$this->db->where('type', $type); //var type is retrieved from input value foreach($tags as $tag): $this->db->or_like('tags', $tag); endforeach;
问题:我需要在LIKE子句周围添加括号,如下所示:
LIKE
SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND (`tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%')
如果括号中的内容是静态的,但是foreach循环使我失望,我知道如何实现此目的。
从CI Wiki:
Codeignighter ActiveRecord功能使您可以相对简单地且独立于数据库地创建SQL查询,但是对于在SQL查询中包含括号没有特定的支持。
例如,当您希望以下语句同时出现where语句时:
WHERE (field1 = value || field2 = value) AND (field3 = value2 || field4 = value2)
可以通过将字符串输入CI-> db-> where()函数来解决此问题,在这种情况下,您将希望专门转义您的值。
请参见以下示例:
$value=$this->db->escape($value); $value2=$this->db->escape($value2); $this->db->from('sometable'); $this->db->where("($field = $value || $field2 = $value)"); $this->db->where("($field3 = $value2 || $field4 = $value2)"); $this->db->get();
可以对LIKE子句使用类似的解决方法:
$this->db->where("($field LIKE '%$value%' || $field2 LIKE '%$value%')"); $this->db->where("($field3 LIKE '%$value2%' || $field4 LIKE '%$value2%')");