如何使用id按类别排序来保持下一个和之前的分页

时间:2012-10-07 10:34:43

标签: php mysql

我的数据库有2个表“category”和“article”,

Category

id | Category
---------------------
 1   Mobiles
 2   Computers
--------------------
Article


id | Category    | title   |article   
-------------------------------------
 1   2      title      article desc   
 2   1     title      article desc
 3   1     title      article desc
 4   1     title      article desc
 5   2     title      article desc


--------------------------------------

我为文章页面生成的网址采用这种格式。

URL/ID/TITLE

我想在当前文章页面中显示下一篇和之前的文章标题。

因此我使用以下代码显示带链接的下一个和上一个标题。

上一篇文章

$getid = $_GET['id'];
$previous = $getid - 1;
$previousdata = $db->getRow("select * from article WHERE news_id='$previous'");

下一篇文章

$getid = $_GET['id'];
$next = $getid + 1;
$nextdata = $db->getRow("select * from article WHERE news_id='$next'");

和PHP代码一样

<a href="http://www.domain.com/article-<?php echo ($previousdata['news_id']); ?>/<?php  echo friendlyURL($previousdata['title']); ?>"> <?php echo  friendlyURL($previousdata['title']); ?></a>

这很好用,它使用id显示下一个和上一个链接中的手机和计算机帖子,

如果我在手机类别中发布2篇文章,则生成的ID为12和13,例如,如果我在计算机类别中发布文章,则生成的ID为14.当用户阅读id为13的移动文章时,在底部显示ID为12的上一篇文章标题和ID为14的下一篇文章标题。显然,上一篇文章是移动的,接下来是计算机类别。

但我想仅显示下一个和之前的“手机”类别的分页,

所以我尝试分配类别

 $getid = $_GET['id'];
 $next = $getid + 1;
 $nextdata = $db->getRow("select * from article WHERE Category=1 AND id='$next'");

这不仅仅过滤移动..

2 个答案:

答案 0 :(得分:1)

您可以直接从查询中获取

$getid = $_GET['id'];
$nextdata = $db->getRow("select * from article WHERE Category=1 AND news_id > ".$getid." order by news_id ASC LIMIT 0,1");

$previousdata = $db->getRow("select * from article WHERE Category=1 AND news_id < ".$getid." order by news_id DESC LIMIT 0,1");

答案 1 :(得分:1)

如果我理解你想要获得同一类别中的下一篇/上一篇文章ID:

下一篇文章:

$nextdata = $db->getRow("
    select * 
    from article 
    where Category = 1 and id > $current_article_id
    order by id
    limit 1
");

上一篇文章:

$previousdata = $db->getRow("
    select * 
    from article 
    where Category = 1 and id < $current_article_id
    order by id desc
    limit 1
");