首页 > 解决方案 > 如何按category_id选择逗号传播的数据?

问题描述

我有这样的书籍数据我正在尝试按 category_id 选择书籍

例如

我有针对 category_id 的复选框我检查 category_id = 1

我使用 %1% 结果应该是 book_id 1,3,5 但 book_id 14,18 也来了

如果我检查 category_id 1 和 8 结果应该是 book_id 3

+---------+-------------+
| book_id | 类别 ID |
+---------+-------------+
| 1 | 1,2 |
| 2 | 14 |
| 3 | 1,8 |
| 4 | 18 |
| 5 | 1,2 |
| 6 | 11 |
+---------+-------------+

我不喜欢这样存储数据,但我无法更改它。

标签: mysql

解决方案


如果可以,您应该规范化数据库。存储逗号分隔值不是可扩展的解决方案。所以理想情况下,你的表应该有一对多的book_idcategory_id

因此,表格应如下所示:

+---------+-------------+
| book_id | category_id |
+---------+-------------+
|       1 |         1  |
|       1 |         2  |
|       2 |         14 |
|       3 |         1  |
|       3 |         8  | 
...

在您的非规范化情况下,您可以使用Find_in_Set()函数:

SELECT book_id 
FROM your_table_name 
WHERE FIND_IN_SET('1', category_id) > 0

推荐阅读