MySql模糊查询json关键字检索方案示例

作者:PHPer自谈 时间:2024-01-16 13:57:44 

前言

最近在项目中遇到这样一个需求:需要在数据表中检索包含指定内容的结果集,该字段的数据类型为text,存储的内容是json格式,具体表结构如下:


CREATE TABLE `product` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '产品名称' COLLATE 'utf8mb4_general_ci',
`price` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '产品价格',
`suit` TEXT NOT NULL COMMENT '适用门店 json格式保存门店id' COLLATE 'utf8mb4_general_ci',
`status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '状态 1-正常 0-删除 2-下架',
`create_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间',
`update_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE
)
COMMENT='产品表'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;

表数据如下:

MySql模糊查询json关键字检索方案示例 

现需求:查找 suit->hotel 中包含10001的数据。

通过谷歌百度查找,大致找到以下几种方案:

方案一:


select * from product where suit like '%"10001"%';
#like方式不能使用索引,性能不佳,且准确性不足

方案二:


select * from product where suit LOCATE('"10001"', 'suit') > 0;
# LOCATE方式和like存在相同问题

方案三:


select * from product where suit != '' and json_contains('suit'->'$.hotel', '"10001"');
#以MySQL内置json函数查找,需要MySQL5.7以上版本才能支持,准确性较高,不能使用全文索引

方案四(最终采用方案):


select * from product where MATCH(suit) AGAINST('+"10001"' IN BOOLEAN MODE);
#可使用全文索引,MySQL关键字默认限制最少4个字符,可在mysql.ini中修改 ft_min_word_len=2,重启后生效

MATCH() AGAINST() 更多使用方法可查看MySQL参考手册:

https://dev.mysql.com/doc/refman/5.6/ja/fulltext-boolean.html

来源:https://blog.csdn.net/zxw09332/article/details/121626111

标签:mysql,模糊查询,json
0
投稿

猜你喜欢

  • python 利用pandas将arff文件转csv文件的方法

    2021-05-31 05:49:34
  • python矩阵转换为一维数组的实例

    2023-09-13 18:34:10
  • Oracle实现动态SQL的拼装要领

    2024-01-15 07:38:23
  • mysql变量用法实例分析【系统变量、用户变量】

    2024-01-20 08:47:20
  • Python带动态参数功能的sqlite工具类

    2022-10-02 14:05:15
  • 正视WEB标准,一本全面的标准参考书

    2009-05-30 16:36:00
  • CSS的未来:一些试验性CSS属性

    2011-06-10 13:20:00
  • Python PyQt5中窗口数据传递的示例详解

    2023-12-30 10:14:43
  • python实现堆栈与队列的方法

    2023-06-19 02:57:04
  • Safari参考样式库之webkit

    2009-07-26 09:50:00
  • MySQL延时复制库方法详解

    2024-01-26 14:21:51
  • Pandas 缺失数据处理的实现

    2023-07-14 05:57:38
  • Python教程之基本运算符的使用(下)

    2021-04-29 20:32:37
  • 使用memory_profiler监测python代码运行时内存消耗方法

    2022-03-02 06:49:56
  • python如何删除文件中重复的字段

    2021-09-19 15:43:12
  • Python Type Hints 学习之从入门到实践

    2022-10-05 15:53:54
  • python字符串常用方法及文件简单读写的操作方法

    2023-11-24 10:20:04
  • Python的gevent框架的入门教程

    2023-06-26 16:58:34
  • 实例讲解启动mysql server失败的解决方法

    2008-12-26 17:27:00
  • Python实用日期时间处理方法汇总

    2022-10-21 03:07:48
  • asp之家 网络编程 m.aspxhome.com