如何使用PHP构建下一个和上一个链接?

4
我使用这段代码来获取某个ID的信息。
$sql = dbquery("SELECT * FROM `videos` WHERE `id` = ".$local_id." ");

while($row = mysql_fetch_array($sql)){
    $video_id = $row["id"];
    $video_title = $row["title"];
}

假设一个页面的链接是example.com/video.php?id=34,
如何根据当前 id 获取下一个和上一个 $video_id 和 $video_title?
问题在于不能将当前 id 的值增加或减少 1,因为 35 或 33 可能会在此期间被删除...
我该如何实现这一点?
//编辑
我有一个非常严重的问题:上一个链接可以把我发送到正确的链接,但下一个链接总是发送到数据库中添加的最后一个视频。
如果我去到数据库中添加的最后或第一个视频,我会收到错误提示,因为没有更多的下一个和上一个视频添加了。

如果无法使用id-1或id+1,那我们该如何知道前一个/后一个视频呢?是否有日期顺序之类的东西?如果是这样,您可以尝试选择日期<或>此视频中的日期,然后设置LIMIT 1。仅供参考。 - Jimmie Lin
2
假设您需要使用以下语句获取下一个ID:"SELECT id FROM videos WHERE id > ".intval($id)." ORDER BY id ASC LIMIT 1",以及上一个ID:"SELECT id FROM videos WHERE id < ".inval($id)." ORDER BY id DESC LIMIT 1"。 - hadvig
我使用这个版本仍然遇到了同样的问题,无效。 - m3tsys
3个回答

5
也许再加上两个查询会起作用...
 select id,title from videos where id < $local_id order by id desc limit 1
 select id,title from videos where id > $local_id order by id asc limit 1

嗨m3tsys,关于下一个总是将您发送到最后一个的问题,请确保您使用'asc'作为订单ID,对于如果已经在第一位或者已经在最后一位,您可以使用mysql_num_rows()来让您知道是否返回了任何内容,如果返回0行,则从数据库中获取第一个或最后一个ID。 - Adam MacDonald
谢谢,不使用“ASC”导致了数据库中最后一个条目的问题。我将尝试使用mysql_num_rows()并查看是否有效。 - m3tsys
我使用了mysql_num_rows(),现在没有错误了。谢谢! - m3tsys

2

要获取您想要的一行数据,您需要使用selectlimit,例如:

SELECT * FROM `videos` WHERE `id` < " . $local_id . " ORDER BY `id` DESC LIMIT 1

或者使用>ORDER BY id ASC来获取下一个视频,而不是我上面展示的上一个


0

这里是你要通过的地方

// entry per page
$rowsPerPage = 3;

// Set page number
if(isset($_GET['page']))
    $pageNum = $_GET['page'];
else
    $pageNum = 1;

注意:以下代码用于显示/设置下一页和上一页的页码。
注意:如果当前页面是主页,则默认 $pageNum 为1,如果将 $pageNum 设置为2,则它将起作用。
if($pageNum){

    $PreviousPageNumber = $pageNum - 1;
    $NextPageNumber = $pageNum + 1;

    echo '<a href="?page='. $PreviousPageNumber .'>Previous Page</a>';
    echo '<a href="?page='. $NextPageNumber .'>Next Page</a>";
}

注意:以下代码用于显示受页面编号影响的记录。
$GetPreviousRecord = ($pageNum - 1) * $rowsPerPage;

注意:LIMIT 的第一个可选值是起始位置。注意:第二个必需的值是要检索的行数。
$query = "SELECT * FROM post WHERE LIMIT $GetPreviousRecord, $rowsPerPage";
$result = mysql_query($query);

最后使用 WHILE 循环并使用 LIMIT 从数据库中获取所有记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接