MySQL查询基于ID的逗号分隔字符串搜索数据

时间:2019-03-17 03:16:41

标签: php mysql stored-procedures

我有两个表product和category表。在我的网站上,我想根据类别过滤产品。因此,我将类别ID作为查询字符串传递给URL。 ID以逗号分隔的字符串形式在URL中传递。

我需要一个可以根据类别ID在产品表中进行搜索的MySQL查询或存储过程。

Product Table

| ID | Product_name | Categories                   |
| 1  | TV 1         | LED, 32 inch, HD             |
| 2  | TV 2         | OLED, 55 inch, Ultra HD (4K) |
| 3  | TV 3         | LCD , 24 inch, HD            |
| 4  | TV 4         | LED, 55 inch, Full HD        |

Category Table

| ID | Category Name |
| 1  | LED           |
| 2  | OLED          |
| 3  | LCD           |
| 4  | 32 inch       |
| 5  | 55 inch       |
| 6  | 24 inch       |
| 7  | HD            |
| 8  | Full HD       |
| 9  | Ultra HD (4K) |

如果过滤器查询字符串为“ 1、3、7”,则Product表应在输出下方返回

Product Table

| ID | Product_name | Categories        |
| 1  | TV 1         | LED, 32 inch, HD  |
| 3  | TV 3         | LCD , 24 inch, HD |

MySQL中应使用什么查询或存储过程?

1 个答案:

答案 0 :(得分:2)

可能的解决方案...

select p.* , count(c.id) as cnt_match   
from product as p 
join category_table  c 
where 
      c.id in ( 1,3,7) and 
      instr(replace(replace(concat(',',p.categories,','),' ,',','),', ',','),
            concat(',',c.categorie_name,','))>0
group by p.id,p.product_name,p.categories;

结果是3行, TV 4 HD

+------+--------------+-----------------------+-----------+
| id   | product_name | categories            | cnt_match |
+------+--------------+-----------------------+-----------+
|    1 | TV 1         | LED, 32 inch, HD      |         2 |
|    3 | TV 3         | LCD , 24 inch, HD     |         2 |
|    4 | TV 4         | LED, 55 inch, Full HD |         1 |
+------+--------------+-----------------------+-----------+

AND ,因为在 categories 字段中数据不干净,因此您需要添加一些 replace 来清除昏迷前后的空间< / p>