特定の日付のデータベース テーブルに 500 を超える行があります。
特定の日付で行を照会するには。
select * from msgtable where cdate='18/07/2012'
これは 500 行を返します。
これらの 500 行 x 10 行を段階的にクエリする方法。最初の 10 行をクエリしてブラウザに表示し、次の 10 行をクエリしてブラウザに表示しますか?
特定の日付のデータベース テーブルに 500 を超える行があります。
特定の日付で行を照会するには。
select * from msgtable where cdate='18/07/2012'
これは 500 行を返します。
これらの 500 行 x 10 行を段階的にクエリする方法。最初の 10 行をクエリしてブラウザに表示し、次の 10 行をクエリしてブラウザに表示しますか?
LIMIT
句を使用するだけです。
SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10
そして、次の呼び出しから、次の方法で実行できます。
SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10 OFFSET 10
OFFSET
およびの詳細については、 を参照LIMIT
しLIMIT
てOFFSET
ください。
LIMIT limit OFFSET offset
動作します。
ただし、安定したORDER BY
句が必要です。そうしないと、次の呼び出しで値の順序が異なる場合があります(たとえば、テーブルへの書き込み後)。
SELECT *
FROM msgtable
WHERE cdate = '2012-07-18'
ORDER BY msgtable_id -- or whatever is stable
LIMIT 10
OFFSET 50; -- to skip to page 6
標準準拠の日付スタイル (私の例では ISO 8601 ) を使用してください。これは、ロケール設定に関係なく機能します。
関連する行が関連する列で挿入、削除、または変更された場合でも、ページングはシフトします。それはしなければなりません。
そのシフトを回避したり、大きなテーブルでパフォーマンスを向上させたりするには、よりスマートなページング戦略を使用してください。
SET @rownum = 0;
SELECT sub.*, sub.rank as Rank
FROM
(
SELECT *, (@rownum := @rownum + 1) as rank
FROM msgtable
WHERE cdate = '18/07/2012'
) sub
WHERE rank BETWEEN ((@PageNum - 1) * @PageSize + 1)
AND (@PageNum * @PageSize)
@PageNum
パラメータを渡すたび@PageSize
に、必要な特定のページを取得します。たとえば、最初の 10 行は次のようになります。@PageNum = 1 and @PageSize = 10
postgresql カーソルを使用できます
BEGIN;
DECLARE C CURSOR FOR where * FROM msgtable where cdate='18/07/2012';
次に使用します
FETCH 10 FROM C;
10行をフェッチします。
フィンランド語
COMMIT;
カーソルを閉じます。
ただし、異なるプロセスでクエリを作成する必要がある場合は、@ Praveen Kumar が提案する LIMIT と OFFSET の方が優れています
Ok。したがって、ページネーションを実装するだけでよいと思います。
$perPage = 10;
$pageNo = $_GET['page'];
データベース内の合計行を見つけます。
$totalRows = Get By applying sql query;
$pages = ceil($totalRows/$perPage);
$offset = ($pageNo - 1) * $perPage + 1
$sql = "SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT ".$offset." ,".$perPage