我有一个从数据库获取结果的问题。我有一列称为“地区”的列,其值包含用户通过时事通讯注册表单用逗号(即“中东,欧洲”)选择的所有地区。
我正在创建一个过滤器,该过滤器将需要获取注册特定区域或多个区域的所有用户列表。用户可以选择多个区域。从前端开始,将所有选择的区域都以“全球,中东”格式获取,我需要在SQL查询中使用它来查找将全球和中东作为所选区域的所有用户。
我尝试使用FIND_IN_SET,但实际上并没有帮助。尝试了以下
$ trimmedRegions = rtrim($ sortType,',');
$ query =“ SELECT * from health_alerts_subscribers在哪里 FIND_IN_SET(Regions,$ trimmedRegions)“;
请问我如何才能达到所需的结果?
答案 0 :(得分:1)
我建议user3783243在说什么。我会选择FIND_IN_SET。这是一个例子。
SELECT {columns} FROM {table} WHERE FIND_IN_SET({item_to_search}, {comma-delimited column})
一种更好的方法是创建一个 regions 表并添加您的区域,然后创建一个名为regionsRelated的相关表(示例),然后从region和链接表中添加一个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');
在下拉列表中,只需选择所有区域,当用户选择所需区域时,您可以将其存储在 userRegion 表中,并使用 INSERT INTO userRegion(userid,regionId)( 1,2); 等。
答案 1 :(得分:0)
您几乎需要像这样格式化sql:
<input>
在PHP中,您将需要遍历用户选择的区域并动态构建这样的查询。
答案 2 :(得分:0)
我可以建议这种方法。
SELECT * FROM table
WHERE
region like("%Global%")
and region like ("%Middle East%")
通过这种方式,您可以使人们同时订阅他们两个。您可以根据需要对其进行调整,显然这并不是最佳解决方案,但是如果您想更新数据库结构,则可以使用它来创建数据透视表。
答案 3 :(得分:0)
您的要求没有确切的功能,但是您可以使用以下代码:
$trimmedRegions = rtrim($sortType,', ');
$trimmedRegionsCollection = explode(",", $trimmedRegions);
$trimmedRegionsRegex = implode("|", $trimmedRegionsCollection); // make string like Global|Middle East
$query = 'SELECT * from health_alerts_subscribers WHERE CONCAT(",", `Regions`, ",") REGEXP ",('.$trimmedRegionsRegex.'),"';
希望它对您有帮助。