代码之家  ›  专栏  ›  技术社区  ›  Fidi

在MySQL表中按日期获取上一个和下一个db记录?

  •  1
  • Fidi  · 技术社区  · 14 年前

    我有一个关于博客的问题,我现在正在用OOP(PHP)开发博客。所有blogpost都存储在MySQL表中。

    在这个应用程序中,你可以通过GET参数给出文章的id来阅读特定的文章。就像这样 http://example.com/?id=2 . 在blogpost下面,我想显示像“上一篇”和“下一篇”这样的导航链接,以查看下一篇和上一篇blogpost按照日期排序,相对于用户现在正在阅读的文章。所以我需要的是mysql表中的下一条和上一条记录的id。

    如何解决这个问题?有没有办法用SQL解决这个问题,或者我必须用php获取所有记录,然后做一些检查来确定这是最后一个还是下一个?

    注意:我不想按id获取最后一篇和下一篇文章,而是按日期获取它们的id。

    任何帮助都将不胜感激。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    8 年前

    SELECT id
    FROM yourtable
    WHERE date < '2010-08-15 14:07:12'
    ORDER BY date DESC
    LIMIT 1
    

    或比某个日期更新的最旧记录:

    SELECT id
    FROM yourtable
    WHERE date > '2010-08-15 14:07:12'
    ORDER BY date 
    LIMIT 1
    

    如果 date 是唯一的,但如果您有两个日期完全相同的记录并重复使用next,则可能跳过其中一个记录。要解决这个问题,您可以使用一个tie breaker列,这样(date,tie breaker)总是唯一的。例如,您可以将主键用作断开连接的键。

    看看我对这个问题的回答,看看如何做到这一点:

        2
  •  0
  •   JanW    14 年前

    下一个id:

    从blogposts中选择前1个id,其中blogdate>$given\ date\ of\ actual\ blogpost$按blogdate排序

    上一个id:

    从blogposts中选择前1个id,其中blogdate<$given\u date\u of \u actual\u blogpost$ORDER BY blogdate DESC