0

2 つの列に基づいてデータベースの結果を返す場合、どのようにページ付けしますか?

limit と offset を使用するのは簡単ですが、大規模なデータセットでは非常に遅くなります。

http://www.sqlite.org/のように、1 つの列の検索用語が一定のままである場合、他の列の最後のレコードを覚えておいて、それを過ぎて次のページに表示する方法をたくさん見てきました。 cvstrac/wiki?p=ScrollingCursor .

しかし、異なる 2 つの列を使用して検索している場合はどうなるでしょうか。

例: First Name と Last name でブラウジングし、名の次に姓の順に並べます。

SELECT * FROM table1 ORDER BY firstname COLLATE NOCASE ASC, lastname COLLATE NOCASE ASC LIMIT 100

100 行を表示し、最後の行はアンジェラ スミスかもしれないので、これを 2 つの変数で覚えてから、次のページを表示します...

SELECT * FROM table1 WHERE firstname>="Angela" COLLATE NOCASE AND lastname>"Smith" COLLATE NOCASE ORDER BY firstname COLLATE NOCASE ASC, lastname COLLATE NOCASE ASC LIMIT 100 

ファーストネームがアンジェラの場合、残りの名前を表示する場合は正しく機能しますが、たとえば、アンジェラがアリアになった後、ラストネームが「スミス」のアリアのみが表示されます。

これを照会する適切な方法は何ですか?

ご覧いただきありがとうございます

4

1 に答える 1

1

最初に名前で、次に姓で並べ替えると、名前は次のように並べ替えられます。

Angela  Smith   <-- last record
Angela  Zwick
Aria    Aames
Aria    Smith
Aria    Zucker

姓が同じ場合、姓は「Smith」の後に来る必要があります。しかし、名前が大きい人にとっては、姓はまったく問題ではありません。

したがって、適切なフィルター条件は次のようになります。

WHERE (firstname = 'Angela' AND lastname > 'Smith')
   OR firstname > 'Angela'
于 2013-10-26T08:13:34.950 に答える