Codeigniter 使用 or_like 搜索具有文本值的列

Codeigniter search a column with text value using or_like

我正在尝试使用 codeigniter 和活动记录 mysql 搜索 mysql 数据库,所以我的数据库看起来像这样。

+----+---------------------+
| id |    search_column    |
+----+---------------------+
|  1 | dog,cat,mouse,horse |
|  2 | pig,lion,tiger      |
|  3 | eagle               |
+----+---------------------+

所以我的第一个方法是使用 where_in 因为我的输入来自一个复选框组和 returns 一个数组值,我将它存储到一个变量 $term = array('cat','dog','lion')

$this->db->where_in('search_column', $term);

但是上面的方法没有用,所以我尝试了下面的方法。

foreach($term as $row){
  $this->db->or_like('search_column', $row);
}

也不走运,因此目标输出必须显示基于字符串数组的结果。任何建议都会很棒。

如果没有其他查询条件,可以先尝试不等条件

$this->db->where('0=1');
foreach($term as $row){
  $this->db->or_like('search_column', $row);
}

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

foreach($term as $row){
    $this->db->or_where("FIND_IN_SET(".$row.",search_column) >", 0);
}

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

改进

为动物创建一个 table 并创建一个连接点 table 以关联您的主要 table 和动物

动物

id  name
1   cat
2   dog
3   lion

路口table

tid(main table pk) animal_id (animal table pk)
1                  1
1                  2
1                  3

search_column从主table中移除,这样就没有多余的数据,搜索和优化会更容易。