0

查询是:

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

从哪里$curr_page获取值的 php 变量$_GET['page']

我想进行分页(每页有 5 个新闻),但我不知道为什么 mysql 会返回额外的值。

在第一页上,结果正常:$curr_page = 0

查询将是:

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

但是在第二页上,查询的结果是添加了额外的新闻,10 条而不是 5 条。

第二页的查询:

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

怎么了?为什么结果有 10 个值而不是 5 个?

谢谢!

4

2 回答 2

2

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

看这个例子,第一个参数是要开始的行,第二个是要显示的结果数

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)

在你的情况下,第二个参数是静态的,第一个参数($curr_page * 5)

于 2012-07-06T15:11:56.560 回答