2

我有一个 MySQL 数据库表,即 ds_message 和 ds_params,它的表 ds_message 在每一行中都包含一个 JSON 对象。我想通过引用 ds_message 主键将 JSON 对象的键和值存储到所有记录的表 ds_params 中id

表:ds_message

_____________________________________________________________________________________
id  key_value
_____________________________________________________________________________________
1  '{"a":"John", "b":"bat", "c":"$10"}'
2  '{"i":"Emma", "j":"Jam"}'

我需要将 key_value 插入到另一个表中,例如

_________________________________________________
id   message_id    json_key    json_value
_________________________________________________
1    1             'a'         'John'
2    1             'b'         'bat'
3    1             'c'         '$10'
4    2             'i'         'Emma'
5    2             'j'         'Jam'

表结构:

CREATE TABLE `ds_message` (
  `id` int NOT NULL,
  `key_value` varchar(500) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='';

ALTER TABLE `ds_message`
  ADD PRIMARY KEY (`id`);

INSERT INTO `ds_message` (`id`, `key_value`) VALUES
(1, '{"a":"John", "b":"bat", "c":"$10"}');

INSERT INTO `ds_message` (`id`, `key_value`) VALUES
(2, '{"i":"Emma", "j":"Jam"}');

CREATE TABLE `ds_params` (
  `id` int NOT NULL,
  `message_id` int NOT NULL,
  `json_key` varchar(500) NOT NULL,
  `json_value` varchar(500) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='';

ALTER TABLE `ds_params`
  ADD PRIMARY KEY (`id`);

请帮助我如何实现这一点,它可能是一个简单的 select cum insert 语句或以优化的方式通过存储过程。

4

1 回答 1

0

使用MySql JSON函数。以下信息将帮助您编写一个存储过程,该过程key_valueds_message.

  1. 要获取对象的键数组,请使用json_keys

     SELECT JSON_keys('{"foo": 1, "bar": 2}')
    
  2. 您可以使用键获取每个属性的值

     SELECT JSON_EXTRACT('{"foo": 1, "bar": 2}', '$.foo');
    
  3. 使用嵌套循环来迭代ds_message记录并使用上述方法迭代每个 json 对象。为每个对象中的每个键插入一条记录。

于 2019-08-21T08:29:43.960 回答