php - mysql查询中的FIND_IN_SET双条件

标签 php mysql

我有一张这样的 table

products : id , name , groups , domains

这里的组和域都是逗号分隔的字段。我正在处理一个现有的项目,我无法更改结构。这是详细信息。

groups : id , name
domains : id , name

产品

id      |   name    |   groups  |   domains
------------------------------------------------
1       |   A       |   1,2,3   |   0
2       |   B       |   1,2,3   |   0   
3       |   C       |   1,2,3   |   1,2 
4       |   D       |   2,3     |   1,3 
5       |   E       |   2,3     |   2,3 
6       |   F       |   2,3     |   2,3,4   
7       |   G       |   1,2,3   |   0   
8       |   H       |   1,2,3   |   0   
9       |   I       |   2,3     |   1,2,4   
10      |   J       |   3       |   1,3 
11      |   K       |   3       |   2,4 
12      |   L       |   3       |   2,3 
13      |   M       |   1,2,3   |   0   
14      |   N       |   1,2,3   |   0   
15      |   0       |   3       |   1,2,4   

域名

id  |   name
---------------------
1   |   yahoo   
2   |   gmail
3   |   mailinator
4   |   hotmail

群组

id  |   name
---------------------
1   |   General 
2   |   Contractor
3   |   Partner

现在我需要选择所有具有这些条件的人。
我如何选择产品

groups : 3
domains : 1

注0表示全部(1,2,3,4)

最佳答案

很遗憾您无法修改此内容,+1 希望您能够修改。但是使用 FIND_IN_SET() 你有正确的想法。唯一需要考虑的事情是考虑 0(全部)值的 OR 条件。为每个条件提供满足 FIND_IN_SET() 或等于 0 的选项。

SELECT *
FROM products
WHERE (FIND_IN_SET(3, groups)
    OR groups = 0)
    AND (FIND_IN_SET(1, domains)
      OR domains = 0)    

SQL Fiddle Demo

关于php - mysql查询中的FIND_IN_SET双条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14665914/

相关文章:

php - MySql小数类型显示问题

MySQL 结合两个查询

php - Guzzle 6,获取请求字符串

c# - DbContext 处置错误

php - 如何在cakephp中以逗号值分隔搜索

Mysql:索引计数查询与维护汇总表

php - 新添加的列在 phpMyAdmin 中不可见

php - 使用单个 sql 语句将数组和非数组值插入数据库

PHP:分离业务逻辑和表现逻辑,值得吗?

php - 无需安装任何东西即可将 HTML 转换为图像