我在从数据库中获取结果时遇到问题。我有一个名为“Regions”的列,它作为一个值包含用户通过带有逗号的时事通讯注册表单选择的所有区域,即“中东,欧洲”
我正在创建一个过滤器,它需要获取注册特定或多个区域的所有用户列表。用户可以选择多个区域。我从前端以“全局、中东”这种格式获取所有选定区域,我需要在我的 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})
更好的方法是创建一个 regions 表并添加您的区域,然后创建一个名为 regionsRelated 的相关表(示例),然后从区域和链接表中添加一个 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); 等等。
关于php - 使用 SELECT MYSQL 查询在数据库中搜索逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829787/