LIMIT和OFFSET - 如果offset大于行数或查询返回的记录少于5,则从头开始

问题描述 投票:1回答:2

我有一个表vid和一些记录。默认情况下,页面中会显示前5条记录。如果用户单击该按钮,jQuery将运行运行php脚本的ajax并检索接下来的5行并返回替换页面上的先前记录和sp的答案。问题是当偏移量大于表中剩余的记录时。说我有15条记录。首先查询前5条记录:

  $start = $_POST['start_forward'];
  $query = "SELECT * FROM vid ORDER BY datev DESC LIMIT $start,5"

  ($_POST['start_forward']

是一个隐藏的输入字段,每次从0开始递增5。

因此,下次用户点击按钮时,$ start现在为5.然后是下一次10.当它达到15时 - 没有任何内容可以显示,因为根本只有15条记录。所以我需要确保总是至少要显示5条记录。如果少 - 我想从列的开头得到缺少的记录。因此,在这种情况下 - 当$ start os 15我希望它再次为0时,我可以从头开始再次检索记录。它应该像一个无限循环。如果记录总数为18.那么当$ start为15时,我希望从列的开头得到另外两个缺少记录的记录。所以如果按id计算它。最终答案记录的ID应为16,17,18,1和2.应从头开始检索最后2个。

我搜索了信息,我发现的是:

 $query = "SELECT FOUND_ROWS();";
 $result = mysqli_query($conn, $query);

我知道它会计算表中的总行数,但我无法理解如何在我的情况下使用它。有帮助吗?

我认为这里的jQuery代码是无关紧要的,因为它只是一个通常的ajax脚本,它将$ start_forward变量发送到php脚本。

提前致谢。

php mysql limit offset record
2个回答
1
投票

使用现在的查询从数据库中获取行后,您可以计算行数,例如:

$count = $result->num_rows;

然后,如果$count不够高(小于5),你可以重复查询,这次使用不同的LIMIT

$query = "SELECT * FROM vid ORDER BY datev DESC LIMIT " . (5 - $count);

请务必使用您的ajax响应发送此金额(5 - $count)。


0
投票

你可以用PHP比较偏移是否高于总数(num_rows),如果它更高,那么你只需扣除总数,只要结果不是负数(递归函数)。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.