Cyb*_*kie 20 mysql arrays activerecord codeigniter
我使用ActiveRecord生成如下查询
SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND
`tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%'
Run Code Online (Sandbox Code Playgroud)
数量tags和值未知.数组是动态创建的.下面我添加了一个可能的数组.
$tags = array (
'0' => 'green'.
'1' => 'blue',
'2' => 'red'
);
Run Code Online (Sandbox Code Playgroud)
有一个标签数组,我使用以下循环来创建我发布在顶部的查询.
$this->db->where('type', $type); //var type is retrieved from input value
foreach($tags as $tag):
$this->db->or_like('tags', $tag);
endforeach;
Run Code Online (Sandbox Code Playgroud)
问题:我需要在LIKE下面的子句中添加括号:
SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND
(`tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%')
Run Code Online (Sandbox Code Playgroud)
我知道如果括号内的内容是静态的,但是foreach循环将我抛弃,我该怎么做到这一点.
The*_*cer 36
来自CI维基:
codeignighter ActiveRecord功能允许您相对简单地创建SQL查询并且与数据库无关,但是没有特定的支持在SQL查询中包括括号.
例如,当你想要一个where语句与下面的内容相似时:
WHERE (field1 = value || field2 = value) AND (field3 = value2 || field4 = value2)
Run Code Online (Sandbox Code Playgroud)
这可以通过将字符串提供给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();
Run Code Online (Sandbox Code Playgroud)
一个类似的解决方法可以用于LIKE子句:
$this->db->where("($field LIKE '%$value%' || $field2 LIKE '%$value%')");
$this->db->where("($field3 LIKE '%$value2%' || $field4 LIKE '%$value2%')");
Run Code Online (Sandbox Code Playgroud)
Rod*_*ira 19
在CI 3.0-dev中,您可以在查询中添加组:
$this->db->select('id, title')
->group_start()
->or_like([ 'title' => $s, 'id' => $s ])
->group_end()
->where([ 'b_del' => 0 ]);
Run Code Online (Sandbox Code Playgroud)
生产:
SELECT `id`, `title`, `venda1`
FROM `itens`
WHERE
(
`title` LIKE '%a%' ESCAPE '!'
OR `id` LIKE '%a%' ESCAPE '!'
)
AND `b_del` =0
Run Code Online (Sandbox Code Playgroud)
小智 7
One of best feature to save your query when you applying multiple where or_where clauses.
$this->db->group_start();
$this->db->where();
$this->db->or_where();
$this->db->group_end();
Run Code Online (Sandbox Code Playgroud)
Happy Coding. :)
| 归档时间: |
|
| 查看次数: |
15101 次 |
| 最近记录: |