在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Mysql逗号拼接字符串的关联查询及统计问题怎么解决

141次阅读
没有评论

共计 2517 个字符,预计需要花费 7 分钟才能阅读完成。

这篇“Mysql 逗号拼接字符串的关联查询及统计问题怎么解决”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql 逗号拼接字符串的关联查询及统计问题怎么解决”文章吧。

背景:

数据库中逗号拼接的字符串,想展示其完整拼接名称或者按其值统计处理,怎么做?

FIND_IN_SET 函数和 GROUP_CONCAT 函数你会用吗?

一、查询问题

eg 两张表 t_conclusion_detail(拜访信息表 ) 和 t_conclusion_info(拜访结论表)

t_conclusion_detail:

iduserNameconclusionIds781918060586991616 梦琪 1,3781986564770103296 西施 3781989822074978304 火舞 2,3,4

t_conclusion_info:

conclusionIdconclusionName1 已成交 2 暂无兴趣 3 需要跟进 4 沟通顺利

想要的效果:

iduserNameconclusionIdsconclusionNameStr781918060586991616 梦琪 1,3 已成交,需要跟进 781986564770103296 西施 3 需要跟进 781989822074978304 火舞 2,3,4 暂无兴趣, 需要跟进, 沟通顺利

思考:

一般这种情况两种方案:要么代码层面处理,要么数据库层面处理

1、方案一(代码层面):先查拜访信息表,将数据返回到服务器,在代码里进行切割,然后再去拜访结论表里面去查询对应的名称,返回到程序进行处理拼接。造成频繁访问数据库,或需要批量查回再匹配处理,这样做虽然很简单也很好理解但是效率太低。

2、方案二(数据库):以 mysql 为例,使用 FIND_IN_SET 函数和 GROUP_CONCAT 函数进行查询,但是数据量特别大时可能不友好,利用不上索引等

SELECT 
s.id,s.user_name userName,s.conclusion_ids conclusionIds,
(SELECT GROUP_CONCAT(user_name) 
FROM t_conclusion_info tr 
WHERE FIND_IN_SET(tr.conclusion_id,(SELECT conclusion_ids FROM t_conclusion_detail WHERE id=s.id))) AS conclusionNameStr
FROM t_conclusion_detail s

tip: 如果数据量特别大建议还是设计时不要逗号拼接设计,改成多表联查,或者使用代码层面处理

二、统计问题

还是上述两张表,想要的效果是每个结论出现频次的统计,即统计逗号拼接的字符串中内容

伪代码,具体根据情况拼接业务 sql:

SELECT
sum(case when find_in_set( 1 ,conclusion_ids) 0 then 1 else 0 end) one,
sum(case when find_in_set( 2 ,conclusion_ids)  0 then 1 else 0 end) two,
sum(case when find_in_set( 3 ,conclusion_ids)  0 then 1 else 0 end) three,
sum(case when find_in_set( 4 ,conclusion_ids)  0 then 1 else 0 end) four
from t_conclusion_detail

结果:

onetwothreefour1131 三、效率问题

思考????:模拟插入 20 万数据,查看 find_in_set 效率问题:

CREATE TABLE `t_conclusion_detail` (
 `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT  主键 ,
 `user_name` varchar(32) COMMENT  姓名 ,
 `conclusion_ids` varchar(32) COMMENT  拜访结论 (多个结论逗号分隔) 
 PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT= 拜访记录表 
DROP PROCEDURE IF EXISTS `t_conclusion_detail_memory`
DELIMITER //
CREATE PROCEDURE `t_conclusion_detail_memory`(IN n INT)
BEGIN
 DECLARE i INT DEFAULT 1;
 DECLARE id INT DEFAULT 1;
 DECLARE num1 INT DEFAULT 1;
 DECLARE num2 INT DEFAULT 1;
 DECLARE num3 INT DEFAULT 1;
 WHILE i   n DO
 SET id = i;
 SET num1 = FLOOR(0 + RAND()*6);
 SET num2 = FLOOR(0 + RAND()*6);
 SET num3 = FLOOR(0 + RAND()*6);
 INSERT INTO `t_conclusion_detail` VALUES (id,  test , concat(num1, , ,num2, , ,num3), );
 SET i = i + 1;
 END WHILE;
END //
DELIMITER ; --  改回默认的  MySQL delimiter:CALL t_conclusion_detail_memory(200000);

经实验,20w 数据时相关查询最慢 2s 左右,可接受范围。

以上就是关于“Mysql 逗号拼接字符串的关联查询及统计问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计2517字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲色成人www永久网站 | 国产一区二区三精品久久久无广告 | 欧美日韩在线观看精品 | 夜爽8888视频在线观看 | 国产顶级熟妇高潮xxxxx | 成人无码视频在线观看网站 | 久久国产自偷自偷免 | 日韩视频 中文字幕 视频一区 | 国产三级片在线观看 | 国产精品久久久久久久久久妇女 | 久久成人免费大片 | 精品人妻少妇一区二区三区不卡 | 暗香影院午夜片 | 日本伊人精品一区二区三区 | 无码人妻aⅴ一区二区三区 无码人妻aⅴ一区二区三区69岛 | 久久青草18免费观看网站 | 黄动漫免费 | 在线观看欧美亚洲日本专区 | 久久精品成人免费看 | 一级毛片一片毛 | 欧美伊香蕉久久综合网99 | 亚洲精品区一区二区三区四 | 欧美国产日韩精品 | 免费人成无码大片在线观看 | 精品天海翼一区二区 | 久久久久久美女精品啪啪 | 成人在线免费看片 | 欧美做爰一区二区三区 | 国产成人一区二区三区在线播放 | 亚洲国产成+人+综合 | 亚洲爱视频 | 永久免费观看美女裸体视频的网站 | 天堂网在线.www天堂在线视频 | 亚洲av人人澡人人爽人人夜夜 | 亚洲一区二区免费在线观看 | 在线视频免费观看a毛片 | 久久久久亚洲av无码专区喷水 | 香蕉影视在线观看 | 亚洲免费在线观看视频 | 青青久在线视频免费观看 | 老师露出两个奶球让我吃奶头 |