PHP限制MySQL返回的行,如果最后一行返回则执行某些操作

时间:2018-07-22 01:09:29

标签: php mysql

我不知道该怎么表达这个问题,但我的意思是我想隐藏或不显示下面显示的“下一步”按钮。我有一个脚本,可以从MySQL中提取所有图像,并按每页30张图像的格式将它们打印到我的页面上,接下来的30张图像将创建一个新页面,该页面由我的后退/下一步按钮激活。我的“后退”按钮上有一个if语句,如果$ startrow不是> = 0则不会显示,但是当数据库中的最后一行显示并隐藏了我的下一个按钮时,我希望下一个按钮具有相同的概念

我在想您是否可以检测到数据库的第一行或最后一行,如果可以,则隐藏下一个按钮。否则,当屏幕上没有任何显示时,它将继续向$ startrow添加30。

我找到了一个脚本来帮助我解决这个here,但是它没有告诉我如何隐藏下一个按钮。

<?php
$startrow = $_GET['startrow'];

if (!isset($_GET['startrow']) or !is_numeric($_GET['startrow'])) {
  $startrow = 0;  
} else {
  $startrow = (int)$_GET['startrow'];
}
?>
<?php

$db = mysqli_connect("localhost", "root", "", "media");
$uploaded = mysqli_query($db, "SELECT * FROM images LIMIT $startrow, 30");

while ($row = mysqli_fetch_array($uploaded)) {
    echo "<div class='img_container'>";
    echo "<li><img class='img_box' src='uploads/images/".$row['image_title']."' ></li>";
    echo "</div>";
}

$prev = $startrow - 30;
if ($prev >= 0) {
    echo '<div class="prevRow"><a href="'.$_SERVER['PHP_SELF'].'?page='.$page.'&startrow='.$prev.'">Back</a></div>';
}
    echo '<div class="nextRow"><a href="'.$_SERVER['PHP_SELF'].'?page='.$page.'&startrow='.($startrow+30).'">Next</a></div>';
?>

2 个答案:

答案 0 :(得分:1)

您可以尝试

$num_rows = 30;  // rows on a page

$db = mysqli_connect("localhost", "root", "", "media");

// get total possible rows
$res = mysqli_query($db, "SELECT count(id) FROM images");
$row = $res->fetch_row();
$total_rows = $row[0];
$res->close();


$uploaded = mysqli_query($db, "SELECT * FROM images LIMIT $startrow, $num_rows");
while ($row = mysqli_fetch_array($uploaded)) {  
    . . .
}


$prev = $startrow - $num_rows;
if ($prev >= 0) {
    echo '<div class="prevRow"><a href="'.$_SERVER['PHP_SELF'].'?page='.$page.'&startrow='.$prev.'">Back</a></div>';
}

if ( $startrow+$num_rows < $total_rows  ) {
    echo '<div class="nextRow"><a href="'.$_SERVER['PHP_SELF'].'?page='.$page.'&startrow='.($startrow+30).'">Next</a></div>';
}

答案 1 :(得分:0)

可能比@RiggsFolly的答案要快一点,您可以修改现有查询以计算行数。

SELECT SQL_CALC_FOUND ROWS * FROM images LIMIT $startrow, 30

然后,查询返回后,您运行第二个查询以获取答案:

SELECT FOUND_ROWS()

FOUND_ROWS() function返回上一个查询将返回的行数,而没有LIMIT(或偏移量)。

这可能不及原始查询孤立时的速度快,但应比原始查询之后的SELECT COUNT(...) ...稍快。但是,如果数据集较小,则任何差异都可能会低于可测量的限制。

另请参阅https://dev.mysql.com/doc/refman/5.7/en/information-functions.html

您还可以将这些内容组合到一个存储过程中,该存储过程接受每页和页码的项目,并返回所有记录以及元数据项(例如总页数)。

相关问题