0

クエリは次のとおりです。

SELECT * FROM `news` ORDER BY `id` LIMIT ($curr_page * 5), ( ($curr_page * 5) + 5 )

$curr_pageから値を取得しているphp変数はどこにありますか$_GET['page']

ページ付け(各ページに5つのニュース)を作成したいのですが、mysqlが追加の値を返す理由がわかりません。

最初のページの結果はOKです:$ curr_page = 0

クエリは次のようになります。

SELECT * FROM `news` ORDER BY `id` LIMIT 0, 5

しかし、2ページ目では、クエリの結果により、5ではなく10のニュースが追加されています。

2ページ目のクエリ:

SELECT * FROM `news` ORDER BY `id` LIMIT 5, 10

どうしたの?結果に5ではなく10の値が含まれるのはなぜですか?

ありがとうございました!

4

2 に答える 2

2

LIMIT ステートメントの構文は次のとおりです。

LIMIT [START_ROW]、[COUNT]

したがって、コードは次のようになります。

SELECT * FROM `news` ORDER BY `id` LIMIT ($curr_page * 5), 5

テーブルの構造を知らずに追加したい: 通常、「ニュース」は ID ではなく投稿日でソートされます。テーブルに公開日フィールドがある場合、ユーザーにとって意味のない ID よりも適切な並べ替え列になります。ID が自動インクリメントであると仮定すると、記事を入力する順序が正式な発行日を反映しているとは限りません。

ドキュメンテーション

于 2012-07-06T15:12:14.767 に答える
1

この例を見てください。最初のパラメーターは開始する行で、2 番目のパラメーターは表示する結果の数です。

mysql> select * From t1 limit 0,5;
+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 | PENELOPE   | GUINESS      | 2006-02-15 04:34:33 |
|        2 | NICK       | WAHLBERG     | 2006-02-15 04:34:33 |
|        3 | ED         | CHASE        | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS        | 2006-02-15 04:34:33 |
|        5 | JOHNNY     | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+
5 rows in set (0.00 sec)

mysql> select * From t1 limit 5,5;
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|        6 | BETTE      | NICHOLSON | 2006-02-15 04:34:33 |
|        7 | GRACE      | MOSTEL    | 2006-02-15 04:34:33 |
|        8 | MATTHEW    | JOHANSSON | 2006-02-15 04:34:33 |
|        9 | JOE        | SWANK     | 2006-02-15 04:34:33 |
|       10 | CHRISTIAN  | GABLE     | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
5 rows in set (0.00 sec)

mysql> select * From t1 limit 10,5;
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|       11 | ZERO       | CAGE      | 2006-02-15 04:34:33 |
|       12 | KARL       | BERRY     | 2006-02-15 04:34:33 |
|       13 | UMA        | WOOD      | 2006-02-15 04:34:33 |
|       14 | VIVIEN     | BERGEN    | 2006-02-15 04:34:33 |
|       15 | CUBA       | OLIVIER   | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
5 rows in set (0.00 sec)

あなたの場合、2番目のパラメーターは静的で、最初のパラメーターは($curr_page * 5)

于 2012-07-06T15:11:56.560 に答える