mysql - 如果存在特定 id,则将 json 值提取到列中

标签 mysql json

我有一些数据库将对象的 json 数组存储在一列中。如果对象的 id 具有特定值,我需要从这些对象键中创建列

我的文档表很简单:

id |   name    | percent_split
1  | some name | [ {id: 59, share:22, value: 55},{id:58, share:40, value:33}]

我已经尝试了以下的一些变体来获取数据,更不用说从对象键中创建列了:

SELECT 
id, name, 
(SELECT FROM documents 
    WHERE (
    CASE WHEN JSON_VALID(percent_split) THEN 
    json_search(percent_split, 'one', '{"id":"59"}') 
    ELSE null 
    END)
) AS result_for_59
FROM documents

我想在我的查询结果中获得额外的列

id, name, 59_share, 59_value, NN_share, NN_value

请帮忙:)

我可以轻松使用任何语言,但在这种情况下,我仅限于使用 MySql 技术。

最佳答案

我们在 mysql 中创建了一个函数,它有两个参数:column_value 和我们搜索的值:

RETURN JSON_EXTRACT(value, JSON_UNQUOTE(
    REPLACE(
        JSON_SEARCH(
            ,'one',column_value
        ),'.id','.share'
    ))
)

然后我们在查询的选择部分调用它,对于我们需要的每个值:

if(json_valid(percent_split),get_share(39, percent_split),NULL) AS share39

关于mysql - 如果存在特定 id,则将 json 值提取到列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57689448/

相关文章:

javascript - 带有 json 数据源的 jQuery UI Datepicker 中的事件

php - 正则表达式 str_replace

MySQL 哈希密码用冒号分隔符存储

json - 风筝SDK : Getting error while Json-import

php - 如何将多个查询合并为一个并使用单个 while 循环获取数据?

json - Flutter:为 Http GET 请求发送 JSON 正文

javascript - Scala 和 JavaScript 的 JSON.stringify

php - 尝试获取模型 codeigniter 中非对象的属性

php - 使用 php 将 xml 数据转换为 mysql 插入/更新查询

php - 根据另一个表的第一个值使用PDO查询MYSQL数据库