SQL LIMIT返回的值多于LIMIT

时间:2013-10-04 02:41:43

标签: mysql sql limit

好的,我对我的页面发生了什么感到困惑。我的页面底部有一个页码,一个表中有23个各种项目的表。

每个页面应该一次显示5个项目。我有页面显示发送带有pagenumber = whatever的get。

基本上我有这个:

$highLimit = $pageNo*5;
$lowLimit = $highLimit-5;
$sql = mysql_query("SELECT * FROM items 
                   ORDER BY id DESC 
                   LIMIT $lowLimit, $highLimit");

所以这里发生了什么:第一页工作正常并显示正确的5.然后第二页显示下一页10,第三页显示最后一页13.然后第4页显示第3页的最后8页第5页显示第4页的最后3页。

当我为$ sql输出num_rows时,它会显示5,10,13,8,3。我不知道它如何能够获得更多行,然后是我输入的限制。

限制为0 5,5 10,10 15等,似乎有效。

$ sql是否保留了之前页面中的原始数据?

我真的不知道问题是什么,希望有人可以提供帮助。

TY

只是为了澄清这是该页面上当前页面和数据的ID

第1页:

23, 22, 21, 20, 19

第2页:

18, 17, 16, 15, 14
13, 12, 11, 10, 9

第3页:

13, 12, 11, 10, 9
8,  7,  6,  5,  4
3, 2, 1

第4页:

8,  7,  6,  5,  4
3, 2, 1

第5页:

3, 2, 1

2 个答案:

答案 0 :(得分:1)

LIMIT的语法可选地是起始偏移量,然后是您想要的行数(documentation)。所以你的第二个值应该总是5

答案 1 :(得分:0)

试试这种方式

$page = isset($_GET["page"]) ? $_GET["page"] : 1;

$max = 5;
$page--;
$lmt = $page * $max;
$page++;
//count number of records from table
$count = 20;

$pages = ceil($count/$max);
$stmt =  $db->prepare("SELECT * FROM table_name ORDER BY id DESC LIMIT ".$lmt.", 3");