分页 - 不按时间顺序编号跳到下一行

时间:2013-05-28 15:24:13

标签: sql pagination

我正在尝试为显示用户在相册中拥有的照片的页面进行简单的分页。

简单的“PREV - NEXT”。

到目前为止,这是我的代码:

$query = "SELECT count(id) FROM pins WHERE board_id='$boardDetails->id'";
$result = mysql_query($query) or trigger_error("SQL", E_USER_ERROR);
$query_data = mysql_fetch_row($result);
$numrows = $query_data[0];

$rows_per_page = 1;
$lastpage      = ceil($numrows/$rows_per_page);

$pageno = (int)$pageno;
if ($pageno > $lastpage) {
   $pageno = $lastpage;
} // if
if ($pageno < 1) {
   $pageno = $boardDetails->id;
} // if

$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;

$query = "SELECT * FROM pins $limit";
$result = mysql_query($query) or trigger_error("SQL", E_USER_ERROR);


if ($pageno == 1) {
   echo " FIRST PREV ";
} else {
   $prevpage = $pageno-1;

   echo "$lastpage posts in this collection.<br>";
   echo " <a href='/board/pins/$boardDetails->id/$prevpage'>PREV</a> ";
} // if


if ($pageno == $lastpage) {
   echo " NEXT LAST ";
} else {
   $nextpage = $pageno+1;
   echo " <a href='/board/pins/$boardDetails->id/$nextpage'>NEXT</a> ";
} // if

这给了我PREV - NEXT链接,但它提供的数字是错误的。

例如,

照片页面位于mysite.com/photoablums/500/487/ 其中500是photoalbum的ID,487是照片的ID。

因为脚本池所有照片的ID不是各自专辑的唯一身份,所以我可以在网站上上传1000张照片,所有照片都是id为1-1000,但它们位于不同的相册中,因此照片的标识为{{ 1}}可能与ID为450的照片位于不同的相册中。 这引发了一个问题,即我的脚本只是链接到它所在的特定照片的上一个和下一个ID。 我编辑代码以消除此错误,同时我试图找出正确的方法来做到这一点。目前,上面的代码显示了上一个和下一个ALBUM ID的链接。

例如,mysite.com / photoalbums / 500/487 /

点击下一步:mysite.com/photoalbums/500/501/ 以及之前:mysite.com/photoalbums/500/499 /

显然,不能保证在id为500的专辑中存在id为501和499的照片。所以它们是死链接。 无论如何,我试图改变NEXT变量 - 451 id,它与图像ID有关,而不是相册。

为了让我更加复杂,因为id的分配方式(对于图像,而不是专辑),id在专辑中不是按时间顺序排列的。

因此,487 ID的相册可能只包含三张照片。 他们的身份不会是1,2和3。 它们可以是任意三个数字。

有人可以指出我要改变代码的方向,这样我就可以跳到mysql中photoalbum表中的下一个现有行,而不是假定-1,+ 1分页。

谢谢!

编辑:

我在这个帖子中找到了解决方案:mysql获取上一个和下一个记录id

1 个答案:

答案 0 :(得分:0)

查询以查找上一个和下一个照片ID号,并使用这些编号建立您的分页链接,而不是盲目地设置$nextpage$prevpage

假设当前照片存储在$ current_photo_id:

$next_photo_query = "SELECT count(id) FROM photos WHERE photo_id > '$current_photo_id' LIMIT 1";
$prev_photo_query = "SELECT count(id) FROM photos WHERE photo_id < '$current_photo_id' LIMIT 1";

// next button
$result = mysql_query($next_photo_query);
$next_btn = " <a href='/board/pins/$boardDetails->id/$result->id'>NEXT</a> ";

// prev button
$result = mysql_query($prev_photo_query);
$prev_btn = " <a href='/board/pins/$boardDetails->id/$result->id'>PREV</a> ";