上一篇/下一篇

文章页面 article.php?id=5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$id = $_GET['id'];

// 查询文章内容
$article_sql = "SELECT * FROM `article` WHERE `id` = {$id}";
// 略

// 查询上一篇文章的ID
$prev_id_sql = "SELECT `id` FROM `article` WHERE `id` < {$id} limit 1";
// 略
echo "<a href=\"article.php?id={$prev_id}\">上一篇</a>";

// 查询下一篇文章的ID
$next_id_sql = "SELECT `id` FROM `article` WHERE `id` > {$id} limit 1";
// 略
echo "<a href=\"article.php?id={$next_id}\">下一篇</a>";
?>

这样需要3次查询,但实际上我们不需要知道上一篇/下一篇文章的具体ID是多少

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$id = $_GET['id'];
$go = $_GET['go'];
switch($go) {
    case 'prev':
        $symbol = '>';
    break;
    case 'next':
        $symbol = '<';
    break;
    default:
        $symbol = '=';
    break;
}

// 查询文章内容
$article_sql = "SELECT * FROM `article` WHERE `id` {$symbol} {$id} LIMIT 1";
// 略
echo "<a href=\"article.php?id={$id}&go=prev\">上一篇</a>";
echo "<a href=\"article.php?id={$id}&go=next\">下一篇</a>";
?>

减少了两次查询,MYSQL会感谢你大爷的

Share and Enjoy:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
This entry was posted in Technologies and tagged . Bookmark the permalink.

3 Responses to 上一篇/下一篇

  1. sxhyll says:

    hoho.也可以不预先初始化上下的id么.

    如果可以就用js触发呗.就是点上或下的时候调js取当前id减或加.

  2. sxhyll says:

    哦.不过如果上一篇id被删了就不好处理了.还是应该取数据库里读上一篇id是几.

    不过,还是可以写个js,点了再去查,似乎可以节省开支哦.

  3. kukat says:

    说真的,我真没看明白你的意思……
    后来和论坛的人讨论了下,这个方法虽然减少了数据库查询,但还是有缺陷

    不能处理到顶了(EOF或者BOF)的情况
    不利于SEO
    如果需要输出上/下篇的标题的话就不行了
    ……

    这也就是个思路而已

    另外,JS是靠不住滴!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>