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

mysql select statement with limit offset bigger than actually records

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

偏移量是使用 GET-Vars 以 page=x 的形式创建的。

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

意味着,使用 page 变量创建的查询结果类似于 LIMIT 1000, 30 - 但查询只会 return 900 条目(因为 table 同时更改。这 return 当然是一个空结果集。

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

获取所有请求的行,至少有一行 (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