首页 > 解决方案 > 如何从逗号分隔字符串中获取 find_in_set 的记录。[MySql]

问题描述

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

例如

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

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

标签: mysqlsqldatabase

解决方案


您不应该将 id 列表存储在字符串中。以下是原因:

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

但是,有时你会被其他人困住,真的、真的、真的、真的、真的很糟糕的数据建模决策。你可以做一些事情,使用正则表达式:

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

或者更准确地说:

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

推荐阅读