php - Mysql查询根据ID的逗号分隔字符串搜索数据

标签 php mysql stored-procedures

我有两个表产品和类别表。在我的网站上,我想根据类别过滤我的产品。所以我将类别 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 4HD

+------+--------------+-----------------------+-----------+
| 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/

相关文章:

javascript - 使用ajax从javascript传递数据并将其保存到数据库

python - 使用格式化输出自动扩展 Python 列表

php - 获取mysql中存储过程的数组输出

mysql - 使用多个表中的数据更新表并按月分组 -

mysql - 如何组合 mysql 和 linux bash 脚本?

mysql - 为什么我不能在存储过程中使用 mysqldump 命令?

php - Laravel 5.7 电子邮件验证路由

php - 脚本运行时在浏览器中输出回显内容?

php - Foreach() 和 each() 内存不足,分块不起作用

tsql - T-SQL 获取存储过程的 SELECTed 值