确保返回的行数最少


ensuring a minimum number of rows returned

我正在用MySQL数据库用PHP制作一个简单的留言板。我使用"限制"操作将消息限制为每页 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 条记录。

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

例如,您可以执行以下操作:

Select SQL_CALC_FOUND_ROWS * from blog_posts where balblabla...

然后,您必须运行另一个查询,如下所示:

Select FOUND_ROWS() as posts_count

它将非常快速地返回总行数。有了这个结果并知道当前页面,您可以决定是否向用户显示下一个/上一个链接。

你可以

做一个:

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

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