2010-11-14 64 views
1

我已經寫了一個MySQL語句來選擇使用創建時間戳的項目的下一個項目,但是當兩個或更多項目具有完全相同的時間戳時,它有問題。爲了讓事情更加令人困惑,商品ID和創建日期並不總是按順序排列,請參閱下面的虛擬數據。選擇下一個/ prev mysql

ID |創建了
~~~~~~~~~~~~~~~~ 1289780100
11 | 1289780100
12 | 1289780100 < - 當前項目
13 | 1289780100
14 | 1289780050
15 | 1289780150

我需要一個SQL語句,可以通過創建的ID然後選擇prev &下一項(兩個查詢都可以)。我已經厭倦了一些不同的查詢,但要麼陷入循環,要麼兩者'prev'&'next'是一樣的。

感謝, 歐文

回答

2
SELECT * 
FROM items 
WHERE created >= current_item_created AND ID >= current_item_ID 
ORDER BY created ASC, ID ASC LIMIT 1,1 

SELECT * 
FROM items 
WHERE created <= current_item_created AND ID <= current_item_ID 
ORDER BY created DESC, ID DESC LIMIT 1,1 
+0

感謝AndreKR,也許我在複雜但在一些通常情況下,創建的日期可能並不合適。 (這是因爲項目已添加但尚未完成或發佈) 例如。如果當前項目在上面的表中是#14,我認爲前一個是沒有的,下一個是#10 – Owen 2010-11-14 23:36:31

+0

@Owen:然後比較'created'字段和創建的當前項目。 – zerkms 2010-11-14 23:37:35

+0

然後它確實有點複雜,但我認爲這些(編輯)的查詢應該這樣做。 – AndreKR 2010-11-14 23:46:05

2

要獲得prev_id:

SELECT 
    t1.id, t1.name, t1.prev as prev_id 
FROM 
(SELECT mt.id, mt.name, @prev_id as prev, @prev_id := id 
FROM `main_table` mt, (SELECT @prev_id:=0) ni 
ORDER BY name ASC) as t1; 

要獲得NEXT_ID - 只是改變訂貨

Here is full example

+0

+1比接受的答案更好。 – Johan 2011-06-05 11:21:40