SQL和FIND_IN_SET进行过滤

时间:2018-11-24 10:16:50

标签: php sql ajax

在主页上,我有一个场所列表,您可以根据场所,名称和该场所提供的服务进行过滤。 我有SQL表,其中包含带有提供的服务的数字定义的机构列表:

id | name            | location | services
1  | Establishment 1 | Florida  | 2,5
2  | Establishment 2 | New York | 1,3,5

应该在主页上通过选中复选框来过滤服务。

我正在寻找SQL查询,该查询将根据所选服务过滤结果(例如,如果用户选择了服务5,它将显示上表中的两个结果,但是如果用户选择了服务5和1-仅ID为2的服务(如果选择5和4,则无结果)。

我发现FIND_IN_SET可能有效,但是如果用户选择多个服务,则似乎不起作用:

SELECT * FROM table1 t WHERE FIND_IN_SET(?, t.services) > 0

? -绑定输入,由POST AJAX发送,作为所选服务的连接,以逗号分隔-例如。服务=“ 1,3,4”。

1 个答案:

答案 0 :(得分:0)

您可以尝试REGEXP

检查此:

SELECT * FROM testtbl t WHERE t.services REGEXP '(^|,)(1|3|4)(,|$)'

您需要以这种形式传递您的逗号分隔值=> 1|3|4