如何从mysql table text数据类型中检索匹配的数据?

zxlwwiss  于 2023-06-28  发布在  Mysql
关注(0)|答案(1)|浏览(92)

我需要构建一个查询,以从表中获取匹配的数据,表中的值为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查询得到它?
谢谢

ca1c2owp

ca1c2owp1#

正如@akina在评论中提到的,你可以使用JSON_KEYS来返回JSON中的键作为数组,使用MEMBER OF来检查一个值是否是数组的元素:

SELECT *
FROM post_sender_detail
WHERE '31' MEMBER OF( JSON_KEYS(CAST(tags AS JSON)))

如果你使用的是mariadb 10.4.7,那么你可以简单地做:

select *
from post_sender_detail
where tags like '%"31":%'

Demo here

相关问题