mysql select语句,限制偏移量大于实际记录

时间:2015-07-21 10:09:01

标签: php mysql limit querying

我创建了一个mysql语句,使用LIMIT x, n对结果进行分页(其中x是偏移量,n是返回的条目。

使用GET-Vars以page=x

的形式创建偏移量

现在Google的索引中有一些奇怪的条目来自旧的抓取,其中页面变量超过了结果集中的实际记录数量。

意味着,使用页面变量创建的查询会产生类似LIMIT 1000, 30的内容 - 但查询只会返回900条目(因为表格内容同时发生了变化。这会返回一个空结果 - 当然是设定。

有没有办法告诉mysql,如果偏移量超过返回的记录,只显示最后一个可能的结果集?我不想首先使用COUNT()进行额外的查询,因为这会使mysql-server上的负载加倍(现在我使用SQL_CALC_FOUND_ROWS来确定总量查询将在没有LIMIT - Statement的情况下返回的记录。

1 个答案:

答案 0 :(得分:2)

获取所有请求的行,至少有一行(MySQL 5.6):

SELECT *
FROM `table`
LIMIT 1000, 30
UNION ALL (
    SELECT *
    FROM `table`
    WHERE FOUND_ROWS() = 0
    ORDER BY `id` DESC
    LIMIT 1
)

SQL Fiddle