2010-08-15 183 views
1

我有一個關於博客的問題,我現在正在開發OOP(PHP)。所有博客帖子都存儲在MySQL表中。在MySQL-Table中獲取按日期的最後一個和下一個數據庫記錄?

在應用程序,你可以通過GET參數給帖子的ID讀取特定職位。就像http://example.com/?id=2一樣。在我想要顯示的導航鏈接(如「上一個」和「下一個」)下的博文中,查看相對於用戶現在閱讀的帖子按日期排序的下一個和上一個博文。所以我需要的是按日期在mysql表中的下一個和前一個記錄的id。

如何解決這個問題?有什麼辦法可以在SQL中解決這個問題,還是必須使用php獲取所有記錄,然後執行一些檢查以確定這是最後一個還是下一個?

只是注意:我不想通過ID獲取最後的和未來的職位,而是按日期,讓他們的ID。

任何幫助,將不勝感激。 謝謝。

+0

可能重複[如何找到表prev和next ID記錄(http://stackoverflow.com/questions/3486778/how-to-find-prev-and-next-id-record-from-table) – 2010-08-15 12:08:11

+0

@Col。 Shrapnel:雖然相似,但並不完全相同,因爲在那個問題中,搜索的領域是一個保證獨一無二的PK。這不一定是這種情況。 – 2010-08-15 12:10:40

+0

@標記具有非唯一值的您無法使用查詢移動到具有相同值的下一條記錄。 – 2010-08-15 12:12:39

回答

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是唯一的,這可以正常工作,但如果您有兩個記錄具有完全相同的日期並且重複使用,則可以跳過其中一條記錄。爲了解決這個問題,你可以使用一個打破平局的列,這樣(日期,平局)總是唯一的。例如,您可以使用主鍵作爲決勝手。

見我回答這個問題,看看如何做到這一點:

+0

這是否工作,當存儲日期的表顏色是類型「日期時間」,而不是像unix時間戳? – 2010-08-15 12:01:03

+0

@faileN:是的。 – 2010-08-15 12:01:51

+0

因爲我認爲,這將永遠不會有兩個相同的日期記錄。我不必考慮這一點,但謝謝! – 2010-08-15 12:29:14

0

下一個ID:

SELECT TOP 1 ID從相關博客文章WHERE blogdate> $ given_date_of_actual_blogpost $ ORDER BY blogdate

以前的ID:

SELECT TOP 1 ID從相關博客文章WHERE blogdate < $ given_date_of_actual_blogpost $ ORDER BY blogdate DESC

的非常近
+1

TOP語法在MySQL中不起作用。這適用於例如SQL Server。 – 2010-08-15 12:06:20

+0

'TOP 1'是什麼意思?是否與查詢結尾的「LIMIT 1」一樣? – 2010-08-15 12:06:51

+0

再次感謝馬克·拜爾斯。 – 2010-08-15 12:07:11

相關問題