如何查找列中是否存在任何逗号分隔值

时间:2017-10-07 20:26:48

标签: mysql codeigniter

我想知道是否有任何值1,2,3,4,5存在于具有记录4,5,7,8,6的表的列中

我正在使用find in sets但它没有提供正确的结果

import colander
class Image(colander.MappingSchema):
    url = colander.SchemaNode(colander.String())
    width = colander.SchemaNode(colander.Int())
    height = colander.SchemaNode(colander.Int())

class Post(colander.MappingSchema):
    id = colander.SchemaNode(colander.Int())
    text = colander.SchemaNode(colander.String())
    score = colander.SchemaNode(colander.Int())
    created_time = colander.SchemaNode(colander.Int())
    attachedImage = Image() # I want to make this as optional

在上面的查询中,我想查找列中任何一行中是否存在任何值1,2,3,4,5

1 个答案:

答案 0 :(得分:-1)

目前尚不完全清楚,但我从您的问题中推断出:

  • 您有一个名为tb_grp的表格,其中包含字段idu_id
  • u_id字段包含以逗号分隔的ID列表

例如:

+----+---------+
| id |   u_id  |
+----+---------+
| 1  | 4,5,6,7 |
| 2  | 1,8,5,9 |
| 3  | 3,4,7,8 |
+----+---------+
  • 基于此,您希望运行一个查询,该查询将返回u_id包含以下其中一个':1,2,3,4 or 5
  • 的所有行

在MySQL中,运行以下查询:

SELECT id AS grp_id from tb_grp
WHERE CONCAT(u_ids,",") REGEXP "(1,|2,|5,|9,)";

会回来:

+--------+
| grp_id |
+--------+
|   1    |
|   2    |
+--------+

现在,我几乎没有接近codeigniter几年,但我希望以下情况应该有效:

$where = "CONCAT(u_ids,',') REGEXP '(1,|2,|3,|4,|5,)';
$query = $this->db->select('id AS grp_id')
                   ->where($where)
                   ->get('tb_grp');
$data = $query->result_array();

尝试解释此

你有一个字符串,其中包含除了(可能)列表中最后一项之外的所有数字的逗号。我们要去RegEx搜索列表,但搜索" 2,"如果列表中的最后一个是' 2' (因为它没有以下逗号)。如果我们搜索" 2"如果没有逗号,我们就会在' 12',' 20'等等。因此,使这个健壮的最佳方法是将逗号连接到列表的末尾,然后搜索" 1,"或" 2,"或" 3,"等等。

我希望这会有所帮助,或者至少让你接近你想要实现的目标