使用MySQL选择JSON列数组包含特定值的行

时间:2020-08-08 03:15:10

标签: mysql json database

我正在为网站创建过滤器系统,但是,无法使用JSON数据搜索MySQL数据库列。

列数据的示例与以下示例完全相同:

[“自我”,“家庭作业”,“讨论”]

整个数据库表如下:

id |  name   |   type   |   subject   |   work 
__________________________________________________________________________
1  | 'name1' | 'type1'  | ["a", "b"]  | ["Self", "Homework", "Discussion"]
2  | 'name2' | 'type2'  | ["b"]       | ["Self", "Discussion"]
1  | 'name3' | 'type3'  | ["a", "b"]  | ["Self", "Homework"]

我想选择homework数组中包含work的所有行。

注意:由于它们具有相同的数组结构,因此我也需要适用于subject的解决方案。

我尝试了这个MySQL命令,但是它们似乎不起作用。

SELECT * FROM materialData WHERE JSON_SEARCH(materialWork, 'all', 'Self')
SELECT * FROM materialData WHERE JSON_EXTRACT(materialWork, '$') = 'Self'

这两个都返回:

MySQL returned an empty result set

有什么办法可以基于列数组中的值选择行?

我从mysql.com上阅读了一些MySQL文档,但没有参加完整的课程。我只了解PHP课程中的MySQL基础知识。因此,请不要判断任何简单或愚蠢的错误。

编辑:

  1. 有人建议我规范化数据库并创建一个新表。

还有别的办法吗?创建一个新表将非常麻烦,尤其是在将来扩展项目时。

基本上,用户将从提供的42个选项中选择一个或多个主题(这是我目前提供的选项,将来会扩展主题的数量)。因此,据我了解,我必须制作一个包含42列的表格?

再次对这个愚蠢的问题表示歉意!

但是,为work创建新表不是问题。 ?

0 个答案:

没有答案