0

ページングの問題を解決しようとしていますが、次のコードがわかりません。

                $lstart = ($page * 6) -6;
                $lend = ($page * 6)-1;
                $limit = $lstart.','.$lend;

私が得る結果はまちまちです。1 ページあたり 6 つの記事を取得する必要がありますが、一貫性がありません。コードは、他の人から継承したスクリプトに組み込まれており、修正しようとしています。誰かが私にこのコードを説明できますか? クエリでは、LIMIT=$limit です。

4

1 に答える 1

2

そのはず...

$lstart = ($page * 6) -6; // quite frankly, it's clearer to write...
       // ($page - 1) * 6
$limit = $lstart.',6';

limit の 2 番目の句は、アイテムの数を宣言します。特定のポイントまでではありません。


mysql ドキュメントから: (コピー/貼り付け)

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

したがって、1,10 は行 2 ~ 11 になります。したがって、行 1 を取得するには、オフセットをゼロに設定する必要があります: 0,10 で、行 1 ~ 10 が得られます。

ここで LIMIT に関するさらなるチュートリアルをチェックすることもできます: http://php.about.com/od/mysqlcommands/g/Limit_sql.htm


説明付きのコード。

$rows_per_page = 6; // you're trying to get 6 rows for every "page".

// On page 1, you'd want rows 0-5 (6 rows inclusively)
// On page 2, you'd want rows 6-111 (again, 6 rows inclusively)
// and so forth.
// So when $page == 1, you want to start at 0, on page 2, start at 6....
// To express this pattern mathematically, we write:
$start = ($page - 1) * 6

// mysql takes offset and number as it's two variables in the LIMIT clause, 
// in that order, when two are provided.
// So we write:
$query = "SELECT * FROM table WHERE 1 LIMIT $start, $rows_per_page;";

// So, at page 1, you get
$query = "SELECT * FROM table WHERE 1 LIMIT 0, 6;"; // if we were to substitute the variables.
$query = "SELECT * FROM table WHERE 1 LIMIT 6, 6;"; // at page 2
$query = "SELECT * FROM table WHERE 1 LIMIT 12, 6;"; // at page 3
于 2013-01-12T20:59:53.973 に答える