绕过mysql的id:32933 BUG 实现order by limit 正常取数据.
今天在寫分頁的時候遇到了一個Mysql的一個BUG,Google了一下發(fā)現(xiàn)網(wǎng)上提出這個問題的Blog就倆還都沒有給出解決方案,其實mysql官方早在2007年就已經(jīng)發(fā)布了聲明。BUG ID:32933;
發(fā)現(xiàn)有人給出了解決方案。后經(jīng)證實此法用途比較少無法滿足一些查詢需求。
經(jīng)過本人一番研究已找到解決方案!
如下所示:
mysql> select * from l_school; +----+--------------------+------+-------+ | id | name | area | order | +----+--------------------+------+-------+ | 1 | 中國人民大學(xué) | 北京 | 1 | | 2 | 北京交通大學(xué) | 北京 | 1 | | 3 | 北京科技大學(xué) | 北京 | 2 | | 4 | 北京郵電大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | | 6 | 北京理工大學(xué) | 北京 | 2 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 8 | 首都師范大學(xué) | 北京 | 1 | | 9 | 中國礦業(yè)大學(xué) | 北京 | 12 | | 10 | 清華大學(xué) | 北京 | 2 | | 11 | 北京大學(xué) | 北京 | 1 | | 12 | 中國地質(zhì)大學(xué) | 北京 | 2 | | 13 | 中國農(nóng)業(yè)大學(xué) | 北京 | 2 | | 14 | 我想去你們公司配鏡 | 北京 | 1 | | 15 | 北京外國語大學(xué) | 北京 | 1 | | 16 | 北京語言大學(xué) | 北京 | 2 | | 17 | 北京信息科技大學(xué) | 北京 | 2 | | 18 | 找不到我的學(xué)校 | 未知 | 2 | +----+--------------------+------+-------+ 18 rows in set?
現(xiàn)有如上數(shù)據(jù)需要做一個分頁每頁顯示13條數(shù)據(jù)要按order列降序排列;
我想肯定有童鞋會這么寫
mysql> select * from l_school order by `order` desc limit 0,13; +----+------------------+------+-------+ | id | name | area | order | +----+------------------+------+-------+ | 9 | 中國礦業(yè)大學(xué) | 北京 | 12 | | 16 | 北京語言大學(xué) | 北京 | 2 | | 12 | 中國地質(zhì)大學(xué) | 北京 | 2 | | 6 | 北京理工大學(xué) | 北京 | 2 | | 13 | 中國農(nóng)業(yè)大學(xué) | 北京 | 2 | | 18 | 找不到我的學(xué)校 | 未知 | 2 | | 3 | 北京科技大學(xué) | 北京 | 2 | | 17 | 北京信息科技大學(xué) | 北京 | 2 | | 10 | 清華大學(xué) | 北京 | 2 | | 11 | 北京大學(xué) | 北京 | 1 | | 8 | 首都師范大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | +----+------------------+------+-------+ 13 rows in set恩不錯完美!......先不要高興的太早問題馬上就出來了!接下來咱們來取剩下的數(shù)據(jù)!
mysql> select * from l_school order by `order` desc limit 13,13; +----+------------------+------+-------+ | id | name | area | order | +----+------------------+------+-------+ | 4 | 北京郵電大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | | 11 | 北京大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 1 | 中國人民大學(xué) | 北京 | 1 | +----+------------------+------+-------+ 5 rows in set上面取出13條加上這次的5條正好18條!有的同學(xué)可能發(fā)下自己這么容易就搞定了而沾沾自喜!其實......好戲來了!
眼尖的同學(xué)可能已經(jīng)發(fā)現(xiàn)了上門的數(shù)據(jù)有問題!來來咱們來對比一下兩次的數(shù)據(jù)吧!
第一次的數(shù)據(jù)------- +----+------------------+------+-------+ | id | name | area | order | +----+------------------+------+-------+ | 9 | 中國礦業(yè)大學(xué) | 北京 | 12 | | 16 | 北京語言大學(xué) | 北京 | 2 | | 12 | 中國地質(zhì)大學(xué) | 北京 | 2 | | 6 | 北京理工大學(xué) | 北京 | 2 | | 13 | 中國農(nóng)業(yè)大學(xué) | 北京 | 2 | | 18 | 找不到我的學(xué)校 | 未知 | 2 | | 3 | 北京科技大學(xué) | 北京 | 2 | | 17 | 北京信息科技大學(xué) | 北京 | 2 | | 10 | 清華大學(xué) | 北京 | 2 | | 11 | 北京大學(xué) | 北京 | 1 | | 8 | 首都師范大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | +----+------------------+------+-------+ 13 rows in set 第二次的數(shù)據(jù)------- +----+------------------+------+-------+ | id | name | area | order | +----+------------------+------+-------+ | 4 | 北京郵電大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | | 11 | 北京大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 1 | 中國人民大學(xué) | 北京 | 1 | +----+---------- 眼尖的童鞋可能已經(jīng)發(fā)下問題所在了! what fuck! 這是什么東東! 咱們附上總表來對比下咱們先不寫limit 咱們直接寫排序 mysql> select * from l_school order by `order` desc ; +----+--------------------+------+-------+ | id | name | area | order | +----+--------------------+------+-------+ | 9 | 中國礦業(yè)大學(xué) | 北京 | 12 | | 18 | 找不到我的學(xué)校 | 未知 | 2 | | 17 | 北京信息科技大學(xué) | 北京 | 2 | | 16 | 北京語言大學(xué) | 北京 | 2 | | 13 | 中國農(nóng)業(yè)大學(xué) | 北京 | 2 | | 12 | 中國地質(zhì)大學(xué) | 北京 | 2 | | 10 | 清華大學(xué) | 北京 | 2 | | 6 | 北京理工大學(xué) | 北京 | 2 | | 3 | 北京科技大學(xué) | 北京 | 2 | | 8 | 首都師范大學(xué) | 北京 | 1 | | 2 | 北京交通大學(xué) | 北京 | 1 | | 15 | 北京外國語大學(xué) | 北京 | 1 | | 14 | 我想去你們公司配鏡 | 北京 | 1 | | 4 | 北京郵電大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | | 11 | 北京大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 1 | 中國人民大學(xué) | 北京 | 1 | +----+--------------------+------+-------+ 18 rows in set按照自己的想象 select * from l_school order by `order` desc limit 0,13; 應(yīng)該取出的是這樣的數(shù)據(jù) +----+--------------------+------+-------+ | id | name | area | order | +----+--------------------+------+-------+ | 9 | 中國礦業(yè)大學(xué) | 北京 | 12 | | 18 | 找不到我的學(xué)校 | 未知 | 2 | | 17 | 北京信息科技大學(xué) | 北京 | 2 | | 16 | 北京語言大學(xué) | 北京 | 2 | | 13 | 中國農(nóng)業(yè)大學(xué) | 北京 | 2 | | 12 | 中國地質(zhì)大學(xué) | 北京 | 2 | | 10 | 清華大學(xué) | 北京 | 2 | | 6 | 北京理工大學(xué) | 北京 | 2 | | 3 | 北京科技大學(xué) | 北京 | 2 | | 8 | 首都師范大學(xué) | 北京 | 1 | | 2 | 北京交通大學(xué) | 北京 | 1 | | 15 | 北京外國語大學(xué) | 北京 | 1 | | 14 | 我想去你們公司配鏡 | 北京 | 1 | +----+--------------------+------+-------+ 13 rows in set 但是事實卻是這樣的+----+------------------+------+-------+ | id | name | area | order | +----+------------------+------+-------+ | 9 | 中國礦業(yè)大學(xué) | 北京 | 12 | | 16 | 北京語言大學(xué) | 北京 | 2 | | 12 | 中國地質(zhì)大學(xué) | 北京 | 2 | | 6 | 北京理工大學(xué) | 北京 | 2 | | 13 | 中國農(nóng)業(yè)大學(xué) | 北京 | 2 | | 18 | 找不到我的學(xué)校 | 未知 | 2 | | 3 | 北京科技大學(xué) | 北京 | 2 | | 17 | 北京信息科技大學(xué) | 北京 | 2 | | 10 | 清華大學(xué) | 北京 | 2 | | 11 | 北京大學(xué) | 北京 | 1 | | 8 | 首都師范大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | +----+------------------+------+-------+ 13 rows in set 第一次取出的數(shù)據(jù)發(fā)現(xiàn)和自己想象中的不一樣 如果還不死心的話咱們把剩下的數(shù)據(jù)取出來 +----+------------------+------+-------+ | id | name | area | order | +----+------------------+------+-------+ | 4 | 北京郵電大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | | 11 | 北京大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 1 | 中國人民大學(xué) | 北京 | 1 | +----+------------------+------+-------+ 5 rows in set 發(fā)下北京大學(xué)竟然出來了兩次 我想去你們公司配鏡卻沒有顯示出來! what fuck!究竟是為毛會這樣、其實這是一個mysql的BUG http://bugs.mysql.com/bug.php?id=32933 并且這個BUG出現(xiàn)的時間還不短了. 這里給出解決方案!如下所示把語句改成join自己然后再order by limit 問題就解決了! mysql> SELECT a.* FROM l_school as a join l_school as b on a.id = b.id ORDER BY a.`order` desc LIMIT 0,13; +----+--------------------+------+-------+ | id | name | area | order | +----+--------------------+------+-------+ | 9 | 中國礦業(yè)大學(xué) | 北京 | 12 | | 18 | 找不到我的學(xué)校 | 未知 | 2 | | 17 | 北京信息科技大學(xué) | 北京 | 2 | | 16 | 北京語言大學(xué) | 北京 | 2 | | 13 | 中國農(nóng)業(yè)大學(xué) | 北京 | 2 | | 12 | 中國地質(zhì)大學(xué) | 北京 | 2 | | 10 | 清華大學(xué) | 北京 | 2 | | 6 | 北京理工大學(xué) | 北京 | 2 | | 3 | 北京科技大學(xué) | 北京 | 2 | | 8 | 首都師范大學(xué) | 北京 | 1 | | 2 | 北京交通大學(xué) | 北京 | 1 | | 15 | 北京外國語大學(xué) | 北京 | 1 | | 14 | 我想去你們公司配鏡 | 北京 | 1 | +----+--------------------+------+-------+ 13 rows in set ----------------------------我是可愛的分割線----------------- mysql> SELECT a.* FROM l_school as a join l_school as b on a.id = b.id ORDER BY a.`order` desc LIMIT 13,13 ; +----+------------------+------+-------+ | id | name | area | order | +----+------------------+------+-------+ | 4 | 北京郵電大學(xué) | 北京 | 1 | | 5 | 北京林業(yè)大學(xué) | 北京 | 1 | | 11 | 北京大學(xué) | 北京 | 1 | | 7 | 北京航空航天大學(xué) | 北京 | 1 | | 1 | 中國人民大學(xué) | 北京 | 1 | +----+------------------+------+-------+ 5 rows in set瞬間世界都恢復(fù)平靜了! BUG就這么搞定了!
測試環(huán)境mysql: 5.6.17;其他環(huán)境未測!
?
本文是原創(chuàng)!轉(zhuǎn)載需要注明本文地址及作者署名; 作者:dsphper 鏈接:dsphper的小窩 ? ??http://www.cnblogs.com/dsphper/p/4371968.html
轉(zhuǎn)載于:https://www.cnblogs.com/dsphper/p/4371968.html
總結(jié)
以上是生活随笔為你收集整理的绕过mysql的id:32933 BUG 实现order by limit 正常取数据.的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: csu 1536 Bit String
- 下一篇: win7_oracle11g_64位连接