-1

結果セットのリストを並べ替えるのに苦労しています。ページネーションを作成しようとしています。Track というテーブルがあります。次の SQL を使用して、ページネーションで使用される ID のリストを取得します。

SELECT trackid FROM track ORDER BY filelength limit 10

結果は次のとおりです。

1
2
3
4
5
6
7
8
9
10

その後、次のステートメントを実行します。

SELECT * FROM track ORDER BY filelength ASC LIMIT 10

そして私は以下を受け取ります:

250   Track 250    0
251   Track 251    0   
252   Track 252    0   
253   Track 253    0   
254   Track 254    0   
255   Track 255    0   
256   Track 256    0   
257   Track 257    0   
258   Track 258    0   
259   Track 259    0    

2 番目の結果セットでは、結果セットが異なるトラックを提供していることがわかります。最初の結果セットと同じ ID が期待されますが、250 から始まるようです。なぜこれが起こっているのですか?

このテーブルには約 20000 行あり、すべての列ファイル長列は 0 です。

Mysqlサーバー5.1.30を実行しています-コミュニティバージョン

4

3 に答える 3

3

あなたはそれを自分で言いました:

列ファイル長の列はすべて 0 です。

単なるORDER BY filelengthノイズであり、任意の行が返されます。データベース エンジンは、実装固有の方法で任意の行を選択します。これは、すべての行が等しく適格であり、特定の順序が指定されていないためです。

リレーショナル データベースのテーブルには、「自然な順序」などというものはありません。あなたはそれを仮定しているようです。

意味のある列を使用ORDER BYして、定義された順序で行を選択します。お気に入り:

SELECT trackid FROM track ORDER BY trackid LIMIT 10;

これを達成するには:

基本的に、2番目のクエリのIDのみを含む結果セットが必要です(オプションで制限なし)

試す:

SELECT trackid
FROM   track
WHERE  trackid BETWEEN 250 AND 259
ORDER  BY trackid;
于 2012-05-08T22:33:49.750 に答える
0

2 つの異なるテーブルからプルしています。playitemではありませんtrack:

SELECT trackid FROM playitem ORDER BY filelength limit 10
SELECT * FROM track ORDER BY filelength ASC LIMIT 10
于 2012-05-08T22:30:47.973 に答える
-1

これをページネーションに使用しようとしている場合。SQL では、LIMIT 句は 2 つの引数を取ることができます。2 つの引数がある場合、最初の引数は返す最初の行のオフセットを指定し、2 番目の引数は返す行の最大数を指定します。最初の行のオフセットは 0 (1 ではない)

たとえば、最初のものは次のようになります。

LIMIT 0, 10

次のものは次のようになります。

LIMIT 10, 10

次のものは次のようになります。

LIMIT 20, 10

等々...

于 2012-05-08T23:09:05.990 に答える