我有两个表产品和类别表。在我的网站上,我想根据类别过滤我的产品。所以我将类别 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 中应该有什么查询或存储过程?
最佳答案
一个可能的解决方案...
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 去掉coma前后的空格
关于php - Mysql查询根据ID的逗号分隔字符串搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55203531/