php - 使用 SELECT MYSQL 查询在数据库中搜索逗号分隔值
问题描述
我有一个从数据库中获取结果的问题。我有一个名为“Regions”的列,其中包含用户通过带有逗号的时事通讯注册表单选择的所有区域,即“Middle East, Europe”
我正在创建一个过滤器,它需要获取注册特定或多个区域的所有用户列表。用户可以选择多个区域。从前端,我以这种格式“全球,中东”获取所有选定区域,我需要在我的 SQL 查询中使用它来查找所有将全球和中东作为选定区域的用户。
我尝试使用 FIND_IN_SET 但它并没有真正帮助。尝试了以下
$trimmedRegions = rtrim($sortType,', ');
$query = "SELECT * FROM health_alerts_subscribers
WHERE FIND_IN_SET(Regions, $trimmedRegions)";
请问有什么想法可以达到所需的结果吗?
解决方案
我推荐 user3783243 所说的。我会选择 FIND_IN_SET。这是一个例子。
SELECT {columns} FROM {table} WHERE FIND_IN_SET({item_to_search}, {comma-delimited column})
更好的方法是创建一个区域表并添加您的区域,然后创建一个名为 regionRelated 的相关表(示例),然后从区域和链接表中添加一个 id(作为多对多)
Table structure example
Table region
id,region
1, Middle East
2, Global
Table user
id,name
1, John
2, Jan
Table userRegion
userId,regionId
1,1
2,1
SELECT user.id,user.name,region.region from user
left join userRegion ON region.userId=user.id
left join region
where region.region in('Middle East','Global');
在您的下拉列表中,只需选择所有区域,当用户选择他们想要的区域时,您将使用INSERT INTO userRegion (userid,regionId) (1,2)将其存储在userRegion表中;等等。
推荐阅读
- autohotkey - Control发送[Strg]+[Win]+[Numpad3]到OBS Studio
- arrays - 我真的无法理解仅仅由于编写函数的差异而发生的错误
- clickhouse - 可以从 clickhouse 中的查询结果创建平面数组吗?
- javascript - 对如何构建 Electron 应用程序感到困惑
- json - 在 Spark Dataframe 中加载嵌套的 Json 文件
- python - 使用 Mask-RCNN 的不准确蒙版:楼梯效果和突然停止
- material-ui - 如何在材质ui中的两个按钮之间留出空格?
- python - Numpy数组中两个“岛”/“连接组件”之间的成对距离
- python - 在 jupyter notebook 中导入 pymc3 的问题
- android - Android Theme Style 以编程方式查找并读取正确的属性