【问题标题】:Pagination - checking for existence of next/previous record分页 - 检查是否存在下一个/上一个记录
【发布时间】:2012-05-06 05:35:31
【问题描述】:

我必须对照片进行分页。

>

假设实际页面是这样的:www.myWebSite.com/photo.php?id=12

如果我按Next,我会重定向到www.myWebsite.com/photo.php?id=13,但如果id=13 的照片从数据库中删除,我该怎么办?

例如:

<?php

require_once '../classes/dataBaseManager/ImageDataBaseManagr.php';

if ( isset ( $_GET ['id'] ) ) {
  $id = $_GET ['id'];
  /**
  * Initialize my data base class.
  */
  try {
    $dataBase = ImageDataBaseManager::connect();
    $select = $dataBase->select( array ( 'id' => $id );
    $previous = (int)($select ['id'] - 1);
    $next = (int)($select ['id'] + 1);
    $photo = $select ['path'];
    echo '<a href="http://www.myWebSite.com/photo.php?id='.$previous.'">Previous</a>';
    echo '<img src="'.$path.'" />';
    echo '<a href="http://www.myWebSite.com/photo.php?id='.$next.'">Previous</a>';
  }
  catch ( PDOException $e ) {
    error_log( $e->getMessage );
    return;
  } 
}
?>

谢谢:)

【问题讨论】:

  • 我在这里看不到您的查询,但您在查询中输入了... WHERE photo_id &gt;= 13 ORDER BY photo_id LIMIT 12。这样,如果有的话,它从 13 开始,否则,它从下一个最高的开始,并抓取接下来的 12 条记录。
  • 唯一可能的顺序是按 id 降序排列?

标签: php mysql image pagination pdo


【解决方案1】:

您有当前的页面 ID,并且想要获取下一个现有 ID。所以构造查询:

SELECT id FROM `table` WHERE `id` > \"$current_id\" ORDER BY `id` ASC LIMIT 1

这应该可以解决您的问题。

当搜索上一张照片时使用这个查询:

SELECT id FROM `table` WHERE `id` < \"$current_id\" ORDER BY `id` DESC LIMIT 1

您还需要检查mysql_num_rows()是否大于0。如果是,则您有下一条记录。如果没有,你到达了最后一个。

【讨论】:

    【解决方案2】:

    您需要获取数据库中照片的最大数量,如果达到最大数量,请不要显示next 链接。 此外,您不应使用照片的 id 进行分页。检查 MySQL 的 LIMIT 选项。

    【讨论】:

      【解决方案3】:

      在我看来,这是实施的缺陷。 我会推荐以下查询字符串(下一个)

       photo.php?currentid=1&action=next 
      

      这样你的选择调用就会变成像 castor 提到的那样

      【讨论】:

        【解决方案4】:

        这取决于您的网站的运作方式。你想让人们知道图像已被删除吗?还是默默跳过?如果您想跳过它,只需修改您的查询以获取请求的 ID 或下一个最高 ID。事实上,如果你也将方向作为变量传递,你可以保留这个查询:

        假设您请求?ID=13&amp;next,将其作为我们的查询:

        SELECT foo, bar FROM images WHERE id >= 13 ORDER BY id ASC LIMIT 1
        

        &lt; 的方向将由 URL 中是否存在 &amp;next&amp;back 来确定:

        $direction = isset( $_GET['back'] ) ? '<' : '>' ;
        

        我们正在为我们的方向变量定义一个默认的搜索方向。如果&amp;back 出现在 URL 中,那么我们将尊重这一点并反转查询中的方向。否则,我们将始终期待等于或大于请求 ID 的图像。

        和往常一样,检查mysql_num_rows() 的返回值是否存在结果中的数据。如果您的查询正在寻找下一张图片,但什么也没找到,您需要通知用户他们位于图库的末尾/开头。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-19
          • 2015-05-31
          • 1970-01-01
          相关资源
          最近更新 更多