2016-05-13 62 views
1

我有一個表MySQL的ORDER BY最接近的兩個日期相結合,今天

...   | reservation_from   | reservation_to   | ... 
1   | 2016-05-13 10:00:00  | 2016-05-21 10:00:00 | ... 
2   | 2016-05-13 20:00:00  | 2016-06-29 14:00:00 | ... 
3   | 2016-05-01 10:00:00  | 2016-05-13 16:00:00 | ... 

現在我已經訂購併獲得最接近天到今天保留。

例如,現在是2016-05-13,所以無論預定是開始還是結束,我都必須得到最接近當前時間的結果。我想訂購,象​​這樣的

...   | reservation_from   | reservation_to   | ... 
1   | 2016-05-13 10:00:00  | 2016-05-21 10:00:00 | ... 
2   | 2016-05-01 10:00:00  | 2016-05-13 16:00:00 | ... 
3   | 2016-05-13 20:00:00  | 2016-06-29 14:00:00 | ... 

正如你看到的,第二個結果reservation_from是05-01,但其reservation_to小於3 reservation_from

我不知道如果我有問題明確,如果不是,請評論它,我應該指定更多。

+1

除非你今天有些時間旅行者是2016-05-13;) –

+0

[MySQL ORDER BY two fields condition]可能重複(http://stackoverflow.com/questions/32742718/mysql-order-by-two -fields-condition) – mitkosoft

+1

你需要解釋你使用什麼邏輯來最接近今天,以及如何處理領帶破碎。 –

回答

2

您想在較小的時間差現在爲了:

select * 
from mytable 
order by 
    least(abs(timestampdiff(second, now(), reservation_from)), 
     abs(timestampdiff(second, now(), reservation_to))); 

您可以爲了應對課程的關係添加futher標準。

+0

This Works!謝謝。你是什​​麼意思? –

+1

他的意思是當時間差異是相同的,哪一個先去。 –

1

USE LEAST。將計算每個領域和今天之間的差異,選擇較小的一個。

SELECT * 
FROM YourTable 
ORDER BY LEAST(ABS(TIMEDIFF(reservation_from, CURDATE()), 
       ABS(TIMEDIFF(reservation_to , CURDATE()) 
       ) 
+0

爲什麼會有人downvote這個答案? –

+0

@GordonLinoff不知道。我想先嚐試一下sqlFiddle,但現在對我來說是:( –

+0

我upvoted你的anwser只是爲了不負面,但它沒有工作,sry :( –