mysql查詢連續(xù)記錄方式
案例
最近遇到一個業(yè)務需求, 需要查找滿足條件且連續(xù)3出現(xiàn)條以上的記錄。
表結(jié)構(gòu):
CREATE TABLE `cdb_labels` ( ? `id` int(10) unsigned NOT NULL AUTO_INCREMENT, ? `type` int(11) NOT NULL DEFAULT '0' COMMENT '標簽類型:1喜歡異性類型,2擅長話題', ? `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '標簽內(nèi)容', ? PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 COMMENT='標簽內(nèi)容';
所有數(shù)據(jù):
SELECT * FROM cdb_labels WHERE type = 1;
解決思路
1.對滿足初次查詢的數(shù)據(jù)賦予一個自增列b
select id,type,content,(@b:=@b+1) as b from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;
2.用自增的id減去自增列b
select id,type,content,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;
3.對等差列c分組, 并將分組的id組裝起來
select count(id),GROUP_CONCAT(id) from ( select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1 ) as d GROUP BY c;
注:為了方便區(qū)分,這里查詢分組成員要大于5(也就是連續(xù)出現(xiàn)超過5次的記錄):
select if( count(id)>5 ,GROUP_CONCAT(id),null) e from (? ? ? select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1? ) as d GROUP BY c;
那么得到的數(shù)據(jù)只有:9,10,11,12,13,14,15
4.根據(jù)組裝的id去找數(shù)據(jù)
select id,type,content from cdb_labels,( select if( count(id)>5 ,GROUP_CONCAT(id),null) e from ( select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1 ) as d GROUP BY c ) as f where f.e is not null and FIND_IN_SET(id , f.e);
總結(jié)建議
- MySQL的函數(shù)例如: GROUP_CONCAT() 的字符長度有限制(默認1024),如果連續(xù)記錄較多會發(fā)生字符截取報錯;
- 建議可以分步驟去查詢,防止嵌套子查詢,還可以提升性能而且避免使用MySQL函數(shù);
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
IPv6設置后如何解決MySQL無法連接localhost的問題
這篇文章主要介紹了IPv6設置后如何解決MySQL無法連接localhost的問題,需要的朋友可以參考下2016-04-04修改Innodb的數(shù)據(jù)頁大小以優(yōu)化MySQL的方法
這篇文章主要介紹了修改Innodb的數(shù)據(jù)頁大小以優(yōu)化MySQL的方法,Innodb是MySQL下一個頗具人氣的數(shù)據(jù)引擎,需要的朋友可以參考下2015-05-05Navicat 遠程連接 MySQL實現(xiàn)步驟解析
這篇文章主要介紹了Navicat 遠程連接 MySQL實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08mysql-8.0.15-winx64 解壓版安裝教程及退出的三種方式
本文通過圖文并茂的形式給大家介紹了mysql-8.0.15-winx64 解壓版安裝,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04mysql8.0.11 winx64安裝配置方法圖文教程(win10)
這篇文章主要為大家詳細介紹了win10下mysql8.0.11 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05