Mysql 如何按具有逗号排列的类别\u id选择数据?
我有这样的书籍资料 我正在尝试按类别\u id选择书籍 比如说 我有一个复选框,目标是类别\u id 我检查类别_id=1 我使用的是%1% 结果应为图书编号1,3,5 但是14、18号书也来了 如果我检查类别_id 1和8 结果应该是第3册 +---------+-------------+ | book_id | category_id | +---------+-------------+ | 1 | 1,2 | | 2 | 14 | | 3 | 1,8 | | 4 | 18 | | 5 | 1,2 | | 6 | 11 | +---------+-------------+ +---------+-------------+ |书号|类别|书号| +---------+-------------+ | 1 | 1,2 | | 2 | 14 | | 3 | 1,8 | | 4 | 18 | | 5 | 1,2 | | 6 | 11 | +---------+-------------+Mysql 如何按具有逗号排列的类别\u id选择数据?,mysql,Mysql,我有这样的书籍资料 我正在尝试按类别\u id选择书籍 比如说 我有一个复选框,目标是类别\u id 我检查类别_id=1 我使用的是%1% 结果应为图书编号1,3,5 但是14、18号书也来了 如果我检查类别_id 1和8 结果应该是第3册 +---------+-------------+ | book_id | category_id | +---------+-------------+ | 1 | 1,2 | | 2 | 14
我不喜欢这样存储数据,但我不能更改它。如果可以,您应该规范化数据库。存储逗号分隔的值不是可缩放的解决方案。因此,理想情况下,您的表应该有一到多行
book\u id
到category\u id
因此,该表应该如下所示:
+---------+-------------+
| book_id | category_id |
+---------+-------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 14 |
| 3 | 1 |
| 3 | 8 |
...
在非规范化情况下,您可以使用以下函数:
SELECT book_id
FROM your_table_name
WHERE FIND_IN_SET('1', category_id) > 0
如果可以,应该规范化数据库。存储逗号分隔的值不是可缩放的解决方案。因此,理想情况下,您的表应该有一到多行
book\u id
到category\u id
因此,该表应该如下所示:
+---------+-------------+
| book_id | category_id |
+---------+-------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 14 |
| 3 | 1 |
| 3 | 8 |
...
在非规范化情况下,您可以使用以下函数:
SELECT book_id
FROM your_table_name
WHERE FIND_IN_SET('1', category_id) > 0
同意。。在一列中存储具有多个值的数据不是数据库的工作方式..同意。。在一列中存储具有多个值的数据不是数据库的工作方式。。