作前端好長時間了,很久沒動sql了。在追一個喜歡的女孩,作測試的,有這麼個需求求助與本屌絲,機會可貴,開始折騰起來,配置mysql,建庫,建表....前端
一 建表mysql
CREATE TABLE `my_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_code` varchar(255) DEFAULT NULL, `code` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
二 模擬數據sql
INSERT INTO `my_test` ( `parent_code`, `code`) VALUES ('01', '001'); INSERT INTO `my_test` ( `parent_code`, `code`) VALUES ('01', '002'); INSERT INTO `my_test` ( `parent_code`, `code`) VALUES ('02', '001'); INSERT INTO `my_test` ( `parent_code`, `code`) VALUES ('01', '003'); INSERT INTO `my_test` ( `parent_code`, `code`) VALUES ('02', '002'); INSERT INTO `my_test` ( `parent_code`, `code`) VALUES ('03', '001'); INSERT INTO `my_test` ( `parent_code`, `code`) VALUES ('04', '001');
查詢 結果以下:測試
三 不分組加序號spa
select (@i := @i + 1) rownum,my_test.* from my_test , (SELECT @i := 0) AS a group by parent_code ,code ,id order by parent_code
結果以下:3d
解釋一下 這個地方用了@i變量 剛開始的 讓 @i=0 而後 每查詢一條 讓 @i+=1code
四 分組 排序 加 序號了blog
剛開始的沒 思路,就度娘了 ,有用 存儲過程 建立臨時表 插入臨時表實現的,還有用存儲過程遊標實現,對於很久沒動sql,並且以前也沒寫過mysql 查詢的 淫來講 好複雜,排序
好囧 ,趕腳要再我女神面前丟人了,but 多謝上天眷顧,查看我女神聊天記錄的時候,靈感來了,爲何不繼續發掘下變量的做用呢 。class
因而 再定義一個變量@pre_parent_code:='' 再存上一個 parent_code ,只要 pre_parent_code不等於當前的parent_code 讓 @i:=0 else @i+=1 就ok了
select
-- rownum 判斷 @pre_parent_code是否和當前的parent_code同樣 ,true:讓 @i+=1 false:重置@i
(@i := case when @pre_parent_code=parent_code then @i + 1 else 1 end ) rownum, my_test.*, -- 設置 @pre_parent_code等於上一個 parent_code
(@pre_parent_code:=parent_code) from my_test , (SELECT @i := 0, @pre_parent_code:='') AS a group by parent_code ,code ,id order by parent_code
結果以下圖
遇到難題千萬別放棄,萬一實現了呢,更況且這是 愛情的力量呢 ,哇O(∩_∩)O哈哈哈~