确保返回的最小行数

时间:2012-06-18 17:51:55

标签: php mysql database mysqli

我正在使用MySQL数据库在PHP中创建一个简单的留言板。我通过'LIMIT'操作限制了20页的消息。

我的网址示例是:http://www.example.com/?page=1

如果未指定页面,则默认为1.正如我之前提到的,每页限制为20,但如果超出可能的30并且我希望查看第2页,我最终只会10个结果。在这种情况下,我的查询的LIMIT部分类似于LIMIT 20,40 - 在这种情况下如何确保返回20个?

我更愿意尝试在MySQL方面尽可能多地保留它。

修改 为了澄清,如果我在第2页,我将获取20-30行,但这只是10行,所以我希望选择10-30。

修改 我目前正在使用以下查询:

我的查询:

SELECT MOD(COUNT(`ID`),20) AS lmt WHERE `threadID`=2;
SELECT * FROM `msg_messages` WHERE `threadID`=2 LIMIT 20-(20-lmt) , 40-(20-lmt) ;

此匹配共有30条记录。

2 个答案:

答案 0 :(得分:1)

我不确定是否真的理解这个问题,但如果我这样做,我认为最好的方法是阻止用户访问没有结果的页面。为此,即使您使用SQL_CALC_FOUND_ROWS使用“LIMIT”子句,也可以轻松检查总共有多少行。

例如你可以这样做:

Select SQL_CALC_FOUND_ROWS * from blog_posts where balblabla...

然后你必须运行这样的另一个查询:

Select FOUND_ROWS() as posts_count

它会很快返回总行数。通过此结果并了解当前页面,您可以决定是否显示指向用户的下一个/上一个链接。

答案 1 :(得分:0)

你可以做:

SELECT COUNT(*)/20 AS pages FROM tbl;

..获取最大页数,然后确定是否要留下部分设置并相应地调整您的分页查询。