2017-10-13 22 views
1
UPDATE

:次の質問に が、私はあなたが行を選択すると、MySQLが行インデックスの種類を作成し、LIMITとOFFSET句はその番号によって、このリストを遮断すると思いました。問題は、間違った値やフィールドの組み合わせを使って行を並べ替えることがほとんど同じ値になってしまうことです。ここで順序改ページ

は、MySQL ;-)

ソリューションを優先DESC BYのでORDERのように、IDのように、フォールバックとして、より信頼性の高いソートフィールドを持つことは常にある多くの「知性」の形に仮定して、私のミスです、id ASC


これは厳密なMySQLの質問です。なぜLIMIT OFFSET句がORDER BYの前に適用されるのでしょうか?何が欠けていますか?ここで

は、まず我々が優先と呼ばれるフィールドが注文した行のリストを選択し、例です。結果はこのようになります

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; 

enter image description here

それから私は選択したいですこのリストの最初の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; 

そして、私はこの結果を持っている:リストは「シエラ・ネバダ」に「グランドバリラ」からなっていないのはなぜ

enter image description here

を?

この問題は実際の注文ではなく、一部の行に届かないことがあります。 Vallnord Ordino-Arcalísのように。 OFFSET値を変更すると、すべての行が処理されず、イベントによって行が繰り返されます。

これは基本的な質問です。しかしこれは、Symfonyの "KnpPaginatorBundle(2.5.3)"を使うときに、私に最後の問題を与えています。私はPHPコードの問題だと思ったが、mysqlクエリは私にこの予期しない結果を与えている。

何が起こっているの助けや手掛かりですか?

ありがとうございます!

+0

あなたの質問はあまりにも厄介なIMO私には答えを与えるが、 "Grandvalira"から "Sierra nevada"までの範囲はどういう意味か分かりません。完全なアルファベット順ソートリストでは、どちらの場所も先頭または最後になりません。あなたの質問を簡素化し、ちょうどポイントに到達してみてください。 –

答えて

1

データの優先度が同じ値を持つ行が多いため、結果が得られません。

優先順位で「順序付け」を使用すると、優先度の高いすべての行が任意の順序で表示されます。同じ優先順位の値を持つ注文についての保証はありません。この関係を解決するには、order by句にフィールドを追加することができます。あなたの選択に応じて、 'order by'句に名前またはidフィールドを含めることもできます。

+0

あなたの権利は、私はこの問題に遭遇しました。より信頼性の高い並べ替えフィールドを追加する必要があります。たとえばidを使用すると、それが動作します。 –