更新: 在以下問題中,我認爲當您選擇行時,MySQL創建一種行索引,然後LIMIT和OFFSET子句通過其數字切斷此列表。問題是我使用錯誤的值或字段組合排序行具有幾乎相同的值。已訂購分頁與MySQL
這裏是我的錯誤,假設到多「智能」形式的MySQL ;-)
解決的辦法是始終有一個更可靠的分揀場作爲備用,如ID,像這樣ORDER BY優先降序,id ASC
這是一個嚴格的MySQL問題。爲什麼在ORDER BY之前應用LIMIT OFFSET子句?或者我錯過了什麼?
這裏是例子,首先我們選擇一個場稱爲優先級排序行的列表:像這樣
SELECT d0_.name, d0_.id AS id_0, d0_.priority AS priority_1 FROM destination d0_ WHERE d0_.active = 1 ORDER BY d0_.priority DESC;
結果如下:
然後我想選擇該列表的前10行使用以下查詢:
SELECT d0_.name, d0_.id AS id_0, d0_.priority AS priority_1 FROM destination d0_ WHERE d0_.active = 1 ORDER BY d0_.priority DESC LIMIT 10 OFFSET 10;
我已經得到了這樣的結果:
爲什麼沒有這樣的例子不勝枚舉,從「Grandvalira的」到「內華達山脈」?
這個問題,不是實際的順序,但一些行從來沒有達到!像「Vallnord Ordino-Arcalís」。當我更改OFFSET值時,它不會遍歷所有行,並且它會重複某些行。
這是最基本的問題。但是當使用Symfony的「KnpPaginatorBundle(2.5.3)」時,這給我帶來了問題。我認爲是PHP代碼的問題,但mysql查詢給我這個意想不到的結果。
任何幫助或線索怎麼回事?
謝謝!
您的問題太麻煩IMO給我一個答案,但我不明白範圍「Grandvalira」到「Sierra Nevada」的意義是什麼?在完整的按字母排序的列表中,這兩個位置都不是第一個或最後一個。嘗試簡化您的問題,並且切中要害。 –