我需要构建一个查询,以从表中获取匹配的数据,表中的值为JSON格式的文本。
CREATE TABLE `post_sender_detail` (
`version_id` int(10) unsigned NOT NULL,
`subject` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`tags` text DEFAULT NULL COMMENT 'JSON of tags details',
PRIMARY KEY (`version_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
像这样存储的值
| 主题|标签| tags |
| - -----|- -----| ------------ |
| 测试sftp新系列|{“1”:“Two2”,“2”:“Three 3”,“7”:“one1”}| {"1":"Two2","2":"Three 3","7":"one1"} |
| 这是测试seedlist| {“31”:“one1”,“32”:“Two2”}| {"31":"one1","32":"Two2"} |
| 非放大器测试001|空值| NULL |
| 非放大器测试001|空值| NULL |
我想要一些查询像
select * from post_sender_detail where tags match the key as 31;
得到的结果就像
| 主题|标签| tags |
| - -----|- -----| ------------ |
| 这是测试seedlist| {“31”:“one1”,“32”:“Two2”}| {"31":"one1","32":"Two2"} |
我的DB版本
| 价值| Value |
| - -----| ------------ |
| 10.4.7| 10.4.7 |
| 一百零七| 107 |
| 10.4.7-MariaDB-1:10.4.7+maria~bionic-log7| 10.4.7-MariaDB-1:10.4.7+maria~bionic-log7 |
我尝试了我的方法,但没有得到想要的结果。你们能帮我一下吗,让我知道是否有任何方法可以从MYSQL查询得到它?
谢谢
1条答案
按热度按时间ca1c2owp1#
正如@akina在评论中提到的,你可以使用
JSON_KEYS
来返回JSON中的键作为数组,使用MEMBER OF
来检查一个值是否是数组的元素:如果你使用的是mariadb 10.4.7,那么你可以简单地做:
Demo here