复选框从用逗号分隔的字段存储的mysql表中细化搜索


Checkboxes refine search from mysql table stored with comma seperated fields

我正在实现基于mysql数据库表中存储的复选框值和匹配值的mysql查询的优化搜索。复选框字段如下:

<input type="checkbox" value="1" name="services_search[]" id="services_search[]" /> Service ABC
<input type="checkbox" value="2" name="services_search[]" id="services_search[]" /> Service XYZ
<input type="checkbox" value="3" name="services_search[]" id="services_search[]" /> Service 123 

我有一个mysql表"users",其中包含字段id、名称和服务。字段"服务"存储了一个或多个服务值,如下所示:

|  id  |  name   |  services 
|  1   |  Mark   | 1, 2, 3
|  2   |  Jhon   | 2, 3
|  3   |  Tina   | 1

现在我的问题是如何实现mysql查询,以获得基于多个检查服务的精确结果。

因为一个用户可以拥有多个服务并且多个服务可以属于多个用户,所以更好的操作方案是多对多关系表。

您的示例结构如下:

Users表

id | name
---+-----
1  | Mark
2  | John
3  | Tina

服务表

id | service
---+--------
1  | Normal
2  | Premium
3  | Admin

表到用户

user_id | service_id
--------+-----------
1       | 1
1       | 2
1       | 3
2       | 1
2       | 2
3       | 1

其中user_id和service_id具有主表中相应字段的外键。现在它很容易维护,不需要字符串操作,并且很容易查询。