mysql - 如何按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 | +---------+-------------+
我不喜欢这样存储数据,但我无法更改它。
解决方案
如果可以,您应该规范化数据库。存储逗号分隔值不是可扩展的解决方案。所以理想情况下,你的表应该有一对多的book_id
行category_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
推荐阅读
- mysql - 加入 3 个表以查找购买了某个项目的新用户
- r - R用str_match_all提取教育程度
- android - Posenet 加载速度极慢
- apache-spark-sql - Spark SQL 查询计划
- python-3.x - Python将文本文件的行读入以#分隔的列表
- c# - Unity - 如何在 Android 上获取设备的日期格式?
- spring-boot - Spring boot - 运行单元测试时忽略所有application.properties?
- python - 如何在不定义类对象的情况下使按键事件起作用?
- typo3 - 在 TYPO3 新闻扩展中获取上个月的网址
- python - 在 kiy 上从 .py 更改画布大小