如何从逗号分隔的字符串中获取find_in_set的记录。[MySql]

时间:2018-09-25 08:34:27

标签: mysql sql database

我有一个逗号分隔的字符串,例如“ 1,2,3”,并且表中的一列还包含逗号分隔的值,例如“ 1,2,4,5,3”。如何获取与任何值匹配的所有记录,以任何值。

例如

  • id ---类别
  • 1 --- 1,2,4,5
  • 2 --- 1,2,3,6
  • 3 --- 2,3,5

如果我搜索字符串“ 1,2,3”,则应该记录该类别包含1或2或3或1,2或1,3或2,3或1,2,3。它不应返回重复的值,因为我们可以将它们分组。

是否可以通过单个查询获取所有记录。

2 个答案:

答案 0 :(得分:0)

尝试一下:

select * from table where category IN (1,2,3);

答案 1 :(得分:0)

您不应在字符串中存储ID列表。原因如下:

  • 值应使用正确的类型存储。 int <>字符串。
  • SQL具有糟糕的字符串处理功能。
  • 外键应正确声明。
  • SQL将无法优化这些查询。
  • SQL有一种存储列表的好方法。它称为,而不是字符串

但是,有时您会被其他非常,非常,非常,非常非常糟糕的数据建模决策所困扰。您可以使用正则表达式执行某些操作:

where category regexp replace($string, ',', '|')

或更准确地说:

where concat(',', category, ',') regexp concat(',', replace($string, ',', ',|,'), ',')