Mat*_*lyn 9 mysql attributes json
我有一个表格,用于存储每行的JSON值.目前,这些都没有标准化.我想最终将每个JSON值标准化为数量和属性标题.是否有可用于确定每个JSON值是否包含指定属性的查询?
举个例子,以下是一些JSON值的样子:
{"name":"Item 1","cost":"4.99"}
{"name":"Item 2"}
{"name":"Item 3","cost":""}
{"name":"Item 4"}
Run Code Online (Sandbox Code Playgroud)
我如何能:
谢谢!这是我第一次询问(至少最近),所以任何帮助都非常感谢!
Bar*_*mar 16
我假设您正在使用MySQL 5.7,它添加了JSON
数据类型.使用JSON_EXTRACT(colname, '$.cost')
访问cost
属性.这将NULL
是没有这样的财产.
WHERE JSON_EXTRACT(colname, '$.cost') IS NOT NULL
WHERE JSON_EXTRACT(colname, '$.cost') IS NULL
WHERE JSON_EXTRACT(colname, '$.cost') != ''
这也将是NULL
,如果在JSON值null
; 我认为没有办法将其与不存在的价值区分开来.
如果您只需要检查 json 键是否存在,可以使用 JSON_CONTAINS_PATH。我希望它比 JSON_EXTRACT 更快。
例子:
我在数据库中有一个权限列。结构如下:
{
"users": {
"user1" : "rw",
"user2" : "r"
},
"groups": {
"root": "rw",
"anotherGroup" : "r"
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想获取具有根组的所有项目(关于实际权限),我使用以下命令:
SELECT * FROM `filesystem_folders` where JSON_CONTAINS_PATH(permissions, 'one', '$.groups.root');
Run Code Online (Sandbox Code Playgroud)
我只是在上面的select之间做了一个非常简单的时间比较,它花费了12.90 秒(10000 次读取)。与以下使用JSON_EXTRACT选择
SELECT * FROM `filesystem_folders` where JSON_EXTRACT(permissions, '$.groups.root') IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
耗时15.13 秒。所以,差别很小。
归档时间: |
|
查看次数: |
8610 次 |
最近记录: |