Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制偏移量大于实际记录的mysql select语句_Php_Mysql_Limit_Querying - Fatal编程技术网

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

Php 限制偏移量大于实际记录的mysql select语句,php,mysql,limit,querying,Php,Mysql,Limit,Querying,我创建了一个mysql语句,使用LIMIT x,n(其中x是偏移量,n是返回的条目)对结果进行分页 偏移量是使用GET Vars以page=x的形式创建的 现在谷歌的索引中有一些奇怪的条目来自于旧的爬网,其中页面变量超过了结果集中的实际记录数量 也就是说,使用page变量创建的查询结果类似于LIMIT 1000,30,但查询只返回900个条目(因为表的内容同时发生了更改。这当然会返回一个空的结果集) 有没有办法告诉mysql,如果偏移量超过返回的记录,就只显示最后一个可能的结果集?我不想首先使用

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

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

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

也就是说,使用page变量创建的查询结果类似于
LIMIT 1000,30
,但查询只返回
900
个条目(因为表的内容同时发生了更改。这当然会返回一个空的结果集)


有没有办法告诉mysql,如果偏移量超过返回的记录,就只显示最后一个可能的结果集?我不想首先使用
COUNT()
进行额外的查询,因为这会使mysql服务器的负载加倍(现在我正在使用
SQL\u CALC\u FOUND\u ROWS
确定查询将返回的记录总数,而不使用
LIMIT
-语句。

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


那么你是在依赖过时的链接吗?你有什么办法可以避免使用MySQL来强制执行吗?你能把它放到你的业务逻辑中吗?请给我们看看这个表中的列。如果没有结果,创建另一个查询是一个问题?然后更改顺序,你就有了最后的记录。我不认为这是另一个解决方案,没有counting records这听起来更像是寻呼系统的设置问题。我尝试了这个查询,当第一个SELECT包含符合限制偏移量的记录时,只返回1行。当限制偏移量没有结果时,UNION将在每次奇数调用时返回1行,在每次偶数调用时返回0行(当您“刷新”时,它在0/1行之间交替).Hm,这真的很奇怪。我现在自己测试了它,得到了同样奇怪的行为。它似乎可以使用
限制1000
,但不能使用
限制0,1000
,这显然是相同的。这种做法毫无意义,对我来说似乎是个错误。我会对此进行调查,谢谢你的提示。是的,很遗憾,它不起作用。我尝试了这是因为它似乎是一个很酷的解决方案。如果你让它工作或发现发生了什么,知道它会很好。我忘记了第二个
选择
,这就是为什么第二个
限制
影响了组合结果,而不仅仅是第二个
选择
。愚蠢的我。但我认为它现在正在按预期工作。测试MySQL 5.6下的d。还添加了一个工作SQL FIDLE。这一次,当有记录时,第一个SELECT会按预期工作(偏移量不会太大)。当偏移量太大,第一个SELECT不会返回任何记录时,我仍然会在UNION中交替获得SELECT结果(第一次1行,第二次0行,依此类推)。
SELECT *
FROM `table`
LIMIT 1000, 30
UNION ALL (
    SELECT *
    FROM `table`
    WHERE FOUND_ROWS() = 0
    ORDER BY `id` DESC
    LIMIT 1
)