我有一个与博客相关的问题,我现在正在开发OOP(PHP)。所有博客文章都存储在MySQL表中。
在应用程序中,您可以通过GET参数提供帖子的ID来阅读特定帖子。就像http://example.com/?id=2
一样。在博客帖子下我想显示导航链接,如“上一个”和“下一个”,以查看相对于用户现在正在阅读的帖子按日期排序的下一个和上一个博客帖子。所以我需要的是按日期在mysql表中的下一个和前一个记录的id。
如何解决这个问题?有没有办法在SQL中解决这个问题,或者我是否必须使用php获取所有记录,然后进行一些检查以确定这是最后一个还是下一个?
请注意:我不想按ID获取上一个和下一个帖子,而是按日期获取它们的ID。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:1)
要获得比特定日期更早的最新记录:
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
是唯一的,这可以正常工作,但是如果你有两个记录具有完全相同的日期并且重复使用下一个,则可以跳过其中一个记录。要解决此问题,您可以使用打破平局列,以便(日期,打破平局)始终是唯一的。例如,您可以使用主键作为决胜局。
请参阅我对此问题的回答,了解如何执行此操作:
答案 1 :(得分:0)
下一个ID:
SELECT TOP 1 id FROM blogposts WHERE blogdate&gt; $ given_date_of_actual_blogpost $ ORDER BY blogdate
之前的ID:
SELECT TOP 1 id FROM blogposts WHERE blogdate&lt; $ given_date_of_actual_blogpost $ ORDER BY blogdate DESC