我有一个表,用逗号分隔的字符串存储ID,如下所示:
field_id_13
------------
1234,5266,3678,4733,7372,5766,2578
我正在使用以下Active Record Construct(CI)来提取数据:
$this->db->select("*")
->from("channel_data d")
->join("channel_titles t","t.entry_id=d.entry_id")
->where("d.field_id_13 LIKE '%".$id."%'")
->where("t.status","open")
->get();
问题在于,有时在我的搜索中,将返回“266”的ID,因此 - 因为我的%周围的子句返回与“5266”匹配的结果。
这里的备选方案是什么,以确保它只返回正确的ID /行?
希望这是有道理的。
答案 0 :(得分:3)
你必须在条件
的地方使用FIND_IN_SET$this->db->where("FIND_IN_SET('$id',d.field_id_13 ) !=", 0);
答案 1 :(得分:0)
如果不是最优雅的话,最简单的方法是在id字段的值的开头和结尾添加逗号,然后搜索逗号包围的值。换句话说:
field_id_13
------------
,1234,5266,3678,4733,7372,5766,2578,
和
$this->db->select("*")
->from("channel_data d")
->join("channel_titles t","t.entry_id=d.entry_id")
->where("d.field_id_13 LIKE '%,".$id.",%'")
->where("t.status","open")
->get();
答案 2 :(得分:0)
SELECT * FROM your_table WHERE field_id_13 REGEXP ('^266,|,266,|266$')
将266替换为您的目标ID。
答案 3 :(得分:0)
FIND_IN_SET
解决方案看起来更优雅,但这也应该有效:
->where("d.field_id_13 REGEXP '[[:<:]]{$id}[[:>:]]'")