mysql - 如何从逗号分隔字符串中获取 find_in_set 的记录。[MySql]
问题描述
我有一个逗号分隔的字符串,如“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 的记录。它不应该返回重复的值,因为我们可以将它们分组。
是否可以通过单个查询获取所有记录。
解决方案
您不应该将 id 列表存储在字符串中。以下是原因:
- 应使用正确的类型存储值。整数 <> 字符串。
- SQL 具有糟糕的字符串处理功能。
- 应正确声明外键。
- SQL 将无法优化这些查询。
- SQL 有一种存储列表的好方法。它被称为表而不是字符串。
但是,有时你会被其他人困住,真的、真的、真的、真的、真的很糟糕的数据建模决策。你可以做一些事情,使用正则表达式:
where category regexp replace($string, ',', '|')
或者更准确地说:
where concat(',', category, ',') regexp concat(',', replace($string, ',', ',|,'), ',')
推荐阅读
- java - 无法传输工件 org.springframework.boot
- android - 尝试使用 adb 推送/安装 .apk 时出错
- c# - 在 ComboBoxItem 问题的单击事件后,WPF 将 ComboBox 设置为 -1 索引
- amazon-web-services - AWS EMR 立即处理日志在 S3 中的登陆
- pandas - Pandas groupby 内存不足
- android - 在相同布局中使用一个图像视图而不是具有相同宽度和高度的其他图像视图
- r - 为什么更新数据表后数据表中的 R/Shiny 输入无法正常工作?
- delphi - 从 propInfo 获取 TList 类型
- php - 关联数组循环
- javascript - 如何在 chrome/safari 上显示多个谷歌地图信息窗口?