2011-01-24 8 views
4

出力が非常に長い場合、MySQLの結果を「次へ」と「前へ」にどのように分割しますか?PHPによるPHP結果のページング

ここで、値は1から10までリストされ、次に次に進みますか?最初のページはLIMIT 10で行うことができますが、私は次のようにしますか?

答えて

5
SELECT * FROM table WHERE ... AND ... LIMIT 10 OFFSET 10 

が、私はそれをもう少し読みやすいという理由だけオフセット・ワードを持つことを好みます。

また、オフセットは0ベースであることに注意してください(返される最初のローのオフセットは0であり、1ではありません)。ですから、LIMIT 10 OFFSET 10は10行目から19行目を返します。

+0

MySQLはOFFSETをサポートしていますか? LIMIT x、y構文IMOよりもはるかに良い。 – ThiefMaster

+0

私はOFFSETの方がいいですか? – Alfie

+0

それは(バージョン5のとにかく)です。 http://dev.mysql.com/doc/refman/5.0/en/select.html機能的な違いはありませんAlfieは、コ​​ードを他の誰かに少し読みやすくしていますが、ThiefMasterが書き込んだ変数名があればそれはどちらがどちらであるかを示します。 – photon

4

あなたはLIMIT句のオフセットを指定することができます:LIMIT句を構築する際

LIMIT 0, 10 
LIMIT 10, 10 
LIMIT 20, 10 
... 

だからあなたのコードは、そのようになります。もちろん

$offset = ($current_page - 1) * $items_per_page; 
$sql = "[...] LIMIT $offset, $items_per_page"; 

を、あなたのことを確認する必要があります$current_page>= 1です。しかし、それは簡単に行えます:

$current_page = empty($_GET['current_page']) ? 1 : max(1, (int)$_GET['current_page']); 
+0

ありがとう、私が探していたものでした。 – Alfie