《Mysql應用Mysql row number()排序函數的用法和注意》要點:
本文介紹了Mysql應用Mysql row number()排序函數的用法和注意,希望對您有用。如果有疑問,可以聯系我們。
雖然使用不多,但是也有情況是需要在mysql 里面寫語句開發功能的.在sql server 使用慣了,習慣了使用row_number() 函數進行排序,但是mysql 確沒有這樣一個函數.然后找到了po主寫的一篇 文章.通過變量賦值來查詢的.(PS 我測試的版本是mysql 5.6)
MYSQL數據庫
先建表
MYSQL數據庫
CREATE TABLE `test` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Col1` varchar(50) DEFAULT NULL, `Col2` varchar(50) DEFAULT NULL, `Col3` int(11) DEFAULT NULL, `Col4` float DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
然后插入測試數據,使用po主介紹的辦法來測試
MYSQL數據庫
insert into test(Col1,Col2,Col3,Col4) values (1,2,3,4),(1,2,6,5),(1,2,7,8),(1,"激發",5,7); delimiter // select @row:=case when @row is null then 1 else @row+1 end as RNr, ID,Col1,Col2,Col3,Col4 from test ; // delimiter ;
結果查詢出結果是
MYSQL數據庫
MYSQL數據庫
查詢出來的記過,Rnr為什么都是1 呢?因為對于本次查詢來說,@row 這個變量的值,一直都是null ,所以根據case 的判別式來看的話,就只能是1 了.引起了這種現象.但是再執行,就正常的了,我們將同樣的腳本
MYSQL數據庫
再執行一次,查出來應該就是2345了
MYSQL數據庫
MYSQL數據庫
測試驗證確實如此,由此可見.變量在本次會話里面是一直存在的,并且每次會沿用,所以就出現前面的那種情況.
MYSQL數據庫
其實對應的解決辦法也很簡單,既然因為每個會話都會用同一個值,那么只需要在開始的時候賦初值就可以解決問題了,比如我們這個例子在開始的時候將 set @row = 0; 加上這句,那么每次執行,都會先賦初值,當然就可以得到一致的執行效果了.
MYSQL數據庫
這個測試告訴了我,在這個數據庫里面,控制變量初始值hin重要.
MYSQL數據庫
以上所述是小編給大家介紹的Mysql row_number()排序函數的用法和注意 ,希望對大家有所贊助,如果大家有任何疑問請給我留言,小編會及時回復大家的.在此也非常感謝大家對維易PHP網站的支持!MYSQL數據庫
《Mysql應用Mysql row number()排序函數的用法和注意》是否對您有啟發,歡迎查看更多與《Mysql應用Mysql row number()排序函數的用法和注意》相關教程,學精學透。維易PHP學院為您提供精彩教程。