0

ユーザーが送信した情報をカタログにページ分割しようとしています。最初は次のようなものがありました:/?page = 3&count = 20&sort = date

$floor = ($page-1)*$count;
$ceiling = $count;
SELECT * FROM catalog ORDER BY date ASC LIMIT $floor, $ceiling

私が読んだように、これはすべての結果をカウントし、制限(床+天井)で停止しないため、悪いです。

今、私はページの最後のアイテムに関してページングすることによってそれをより速くしようとしています

/?last_date = 2012&count = 20&sort = date

$ceiling = $count;
SELECT * FROM catalog WHERE date>$last_date ORDER BY date ASC LIMIT $ceiling

しかし、これは正しく機能しませんか?一部の日付は同じになります。議論のために、より正確なタイムスタンプを使用できないと仮定しましょう。たとえば、価格で並べ替えると小数点以下2桁までしか表示されず、間違いなく重複します。

この改善を機能させるためにできることはありますか、それとも以前のクエリに戻す必要がありますか?

4

3 に答える 3

0

これを使用するには、日付によって両方向に制約する必要があります。日付範囲が長すぎる場合は各日付範囲を複数ページ表示できます。それ以外の場合は、日付のセット全体を選択します。欠点は、ページサイズがいくらか任意であり、場合によっては結果をページングするのに時間がかかる可能性があることです。

つまり、最初にその日付範囲でcount()を実行する必要があるため、次のページがこの日付範囲にあるのか、次の範囲の日付にあるのかがわかります。

于 2012-04-23T20:06:21.940 に答える
0

私は最初のページネーションの例を使用することになりました。

于 2012-04-24T19:26:48.467 に答える
0

私がそれをよく理解していれば、SQLステートメントのWHERE句のLIKE演算子が役立つと思います...しかし、私は間違っている可能性があります。正確に何が間違っているのかをもっと指定できますか?

于 2012-04-24T19:33:00.397 に答える