Mysql 如何按具有逗号排列的类别\u id选择数据?

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

我有这样的书籍资料 我正在尝试按类别\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 | +---------+-------------+
我不喜欢这样存储数据,但我不能更改它。

如果可以,您应该规范化数据库。存储逗号分隔的值不是可缩放的解决方案。因此,理想情况下,您的表应该有一到多行
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

同意。。在一列中存储具有多个值的数据不是数据库的工作方式..同意。。在一列中存储具有多个值的数据不是数据库的工作方式。。