gpt4 book ai didi

php - CodeIgniter "like()"函数在搜索词中带有 % 通配符

转载 作者:可可西里 更新时间:2023-11-01 08:15:23 26 4
gpt4 key购买 nike

假设我有这样的功能:

 public function get_list($category = '', $limit = 10, $offset = 0) {
if (!empty($category))
$this->db->where('category', $category);
$search = $this->input->get('search');
if (!empty($search))
$this->db->or_like(array('foo_column'=>$search));
$query = $this->db->get('table_name', $limit, $offset);
//echo $this->db->last_query();
return $query->result();
}

将查询生成为:

SELECT * FROM table_name WHERE foo_column LIKE '%match something%'

如您所见,% 通配符可以添加在两边,beforeafter

如果我想制作这样的东西怎么办:

... WHERE foo_column LIKE '%match%something%'?

仅供引用,我使用 str_replace() 函数将 change space 更改为 %codeigniter 总是 使用 斜线 转义。它产生如下查询:

... WHERE foo_column LIKE '%match\%something%'

这在使用关键字匹配某物搜索匹配另一个东西时很有用,而通配符在第一个和/或之后似乎没有工作。

最佳答案

为了实现这种功能,我已经用一些不同的条件更新了您的代码。

Note: Here I've manually placed values of categories and search

public function get_list($category = '', $limit = 10, $offset = 0) {
$category = 'electronics';
if (!empty($category)) {
$this->db->where('category', $category);
}
$search = 'match something';
if (preg_match('/\s/', $search) > 0) {
$search = array_map('trim', array_filter(explode(' ', $search)));
foreach ($search as $key => $value) {
$this->db->or_like('foo_column', $value);
}
} else if ($search != ''){
$this->db->like('foo_column', $search);
}
$query = $this->db->get('table_name', $limit, $offset);
return $query->result();
}

此处 $search = 'match something' 将生成如下查询:

SELECT * FROM (`table_name`) WHERE `category` = 'electronics' AND  
`foo_column` LIKE '%match%' OR `foo_column` LIKE '%something%' LIMIT 10

如果 $search = 'match something another' 那么它将生成查询为

SELECT * FROM (`table_name`) WHERE `category` = 'electronics' AND 
`foo_column` LIKE '%match%' OR `foo_column` LIKE '%something%' OR
`foo_column` LIKE '%another%' LIMIT 10

如果 $search = 'match' 它将生成查询为

SELECT * FROM (`table_name`) WHERE `category` = 'electronics' AND 
`foo_column` LIKE '%match%' LIMIT 10

如果 $search = '' 它将生成查询为

SELECT * FROM (`table_name`) WHERE `category` = 'electronics' LIMIT 10

关于php - CodeIgniter "like()"函数在搜索词中带有 % 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30229069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com