【问题标题】:Flagging last overall row in MySQL query using LIMIT使用 LIMIT 标记 MySQL 查询中的最后一行
【发布时间】:2022-01-25 20:17:51
【问题描述】:

我以 5 个批次从数据库中检索结果,每次获取最后一个“id”并通过 jquery 返回它,因此只返回“id”较小的行。我有一个加载更多按钮,在加载所有行后它应该会消失,即使这意味着 5、7 或 11 行。

我有这个问题:

 $query = $pdo->prepare("SELECT * FROM names WHERE id < ? ORDER BY id DESC LIMIT 5");
 $query->execute([$_POST["id"]]);
 while($row = $query -> fetch()) {
echo "<div id="$row["id"].">".$row["name"]."</div>";
 });

问题是,是否有一种简单且高效的方法来添加一列来标记每一行(如果它是最后一行或不是在单个查询中)?考虑到我使用 LIMIT of 5,显然查询还应该检查 5+1 行的潜在存在。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    将限制设置为 6 并检查返回的行数。

    对于 while 循环,使用计数器:

    $query = $pdo->prepare("SELECT * FROM names WHERE id < ? ORDER BY id DESC LIMIT 6");
    $query->execute([$_POST["id"]]);
    
    $n=5;
    while($row = $query -> fetch() && $n-->0) 
    {
      echo "<div id="$row["id"].">".$row["name"]."</div>"; 
    }
    

    【讨论】:

    • 我只需要显示 5 个。如上所示,我正在使用 while 循环。
    • 在 5 个条目后打破循环。
    • 如果数据库中只有 3 个条目怎么办?
    • 那么while循环将在3之后结束
    • 不幸的是,我不知道如何实现这一点。必须标记找到的最后一项,因为循环只会在下一项中断,而下一项不存在。
    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2012-06-08
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多