2012-07-26 40 views
0

我有一個這樣的表MYSQL實現下一個和上一行:如何查詢

SELECT * FROM test_table 

id u_id name date 
1 101 name2 2012-05-14 
2 305 name3 2012-05-11 
3 506 name4 2012-05-05 
4 207 name5 2012-05-12 
5 108 name6 2012-05-03 

SELECT id,u_id from test_table order by date; 

id u_id 

5 108 
3 506 
2 305 
4 207 
1 101 

我有哪里哪里,這些東西都顯示

上點擊需要的任何u_id一個應用程序我到不同的網頁,其中持續顯示細節的東西 現在我想編寫一個查詢其預訂購給我的下一個記錄

如何achive下一個記錄從這裏像

當我說u_id>305它應該給我207? 和u_id<305它應該給我506

回答

0

鑑於u_id是305,以日期獲得下一個記錄:

SELECT id,u_id 
FROM test_table a 
WHERE a.date > (SELECT date FROM test_table b WHERE b.u_id = 305) 
ORDER BY a.date 
LIMIT 1; 

並獲得通過日期之前的紀錄:

SELECT id,u_id 
FROM test_table a 
WHERE a.date < (SELECT date FROM test_table b WHERE b.u_id = 305) 
ORDER BY a.date DESC 
LIMIT 1; 
2

我認爲這是你在找什麼:

SELECT id, u_id 
FROM test_table 
WHERE uid > 305 
ORDER BY date ASC 
LIMIT 1; 

SELECT id, u_id 
FROM test_table 
WHERE uid < 305 
ORDER BY date DESC 
LIMIT 1; 
+0

你怎麼會需要使用原來的結果集?我認爲這是一個完全不同的頁面。你不能爲這個新頁面運行一些新的查詢嗎? – theon 2012-07-26 12:51:46

+1

對於此解決方案,如果需要性能,請在(uid,日期)上添加複合索引。 – 2012-07-26 13:15:09

+0

theon,日期是包括你是對的 – syncdm2012 2012-07-26 13:39:54

0

試試這個:

select id,u_id from 
    (SELECT id,u_id,@rownum:= @rownum+1 AS Sno 
    from test_table , (SELECT @rownum:=0) r; 
    order by date)a 
    where Sno=<@ID-1/+1> 

可以,如果說你的當前斯諾= 5,然後4將給以前的記錄和6將給下一個記錄

+0

我寫它在MYSQL – syncdm2012 2012-07-26 12:59:10