首页 > 解决方案 > 使用 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)";

请问有什么想法可以达到所需的结果吗?

标签: phpmysqlfilter

解决方案


我推荐 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表中;等等。


推荐阅读