2011年1月 7日

[pgsql-jp: 40654] Re:order by asc offset limit での並び順について

2011/1/7 apostleofwhom <apostleofwhom@xxxxx>:
> SQLはこんな感じです。
> SELECT * FROM member WHERE status=0 and seg!='' ORDER BY seg ASC OFFSET 20 LIMIT 20
> SELECT * FROM member WHERE status=0 and seg!='' ORDER BY seg ASC OFFSET 40 LIMIT 20
> seg 列は重複ありで、seg 列の値が同じデータが20件あります。

ソートキーに重複 (同じ値) ガある場合には、それらの順序は不定です。
なので、実行するたびに結果が異なるのは仕様と言えます。

# 内部的なソートアルゴリズムは、クイック・ソートと呼ばれるものです。

> ソートする列を追加して user_id ASC すると(user_id はユニーク)正常に
> 表示されます。
> SELECT * FROM member WHERE status=0 and seg!='' ORDER BY seg ASC, user_id ASC OFFSET 20 LIMIT 20

ページングする場合には、このようにソートキーの組み合わせ全体で
ユニークになるような列を指定してください。

--
Itagaki Takahiro

投稿者 xml-rpc : 2011年1月 7日 03:01
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/101163
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。