带有逗号分隔值的 Codeigniter Mysql 列

Posted

技术标签:

【中文标题】带有逗号分隔值的 Codeigniter Mysql 列【英文标题】:Codeigniter Mysql column with comma seperated values 【发布时间】:2018-08-22 13:11:49 【问题描述】:

我想针对单个值测试具有多个值的字段,我的 SQL 就像。

WHERE id (1);

数据库值就像

id
---
1,2

2,3

1,3,4

代码点火器

$this->db->select('*');
$this->db->from('content');
$this->db->where('name', $name);
$this->db->where('id', $id);

我试过了

$this->db->where_in('id', explode(',', $id));

但它不起作用。请帮我解决这个问题。

【问题讨论】:

where_in 有什么问题? 如果 id 值(例如(1,2))和数据库值(1,2)相同,where_in 正在工作。如果 id 值为 1 且数据库值为(1,2),则其不工作。@ Kaleem 那么 like() 对你来说不是一个好的选择。当您使用 id=2 进行搜索时,它将获得具有 2,12,22,32 ...222 等的记录。 Please look at this option。看起来很适合您的问题 感谢您的建议@Kaleem 【参考方案1】:

要从给定集合中查找值,您可以使用FIND_IN_SET

$this->db->where("FIND_IN_SET(".$id.",id) >", 0);

注意:这种设计被认为是不好的设计,你应该规范你的结构,我建议你看看Database Normalization

【讨论】:

【参考方案2】:

如果您使用like() 而不是where() 会怎样

$this->db->like('id', $id);
// Produces: WHERE `id` LIKE '%2%' ESCAPE '!'

注意:如果 2 是值 2,22,222 将通过此

【讨论】:

【参考方案3】:

请试试这个:

$this->db->select('*')->from('table_name')
       ->where("column_name LIKE '%$key_values%'")->get();

【讨论】:

以上是关于带有逗号分隔值的 Codeigniter Mysql 列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有逗号分隔值的 IIB 覆盖命令

如何使用带有逗号分隔值的单元格通过apps脚本创建动态下拉列表

使用 laravel 和 vue js 从 mysql 数据库中检查带有逗号分隔值的复选框

如何在laravel中使用逗号分隔值的列上使用'where'

mysq

使用连接(codeigniter)从单个字段中检索和打印逗号分隔符后的值