2010-11-19 49 views
1

我在數據庫中有一些日期/事件,我想按月排序它們(年無關緊要) - 現在所有的時間戳都在unix中一個名爲eventDate的列。如何做出該查詢?mysql ORDER BY「month」with unixtime

SELECT * FROM日曆ORDER BY EVENTDATE

顯然,這對它們進行分類,但我要確保在所有年所有事情都是由每月分組 - 那麼顯然需要安排他們一月,二月,三月,等等。

有什麼建議嗎?

謝謝!

回答

3

您可以使用FROM_UNIXTIME()函數+ MONTH()函數。

SELECT MONTH(FROM_UNIXTIME(0)); 
-- 12 

但沒有理由來存儲Unix時間戳在實際時間戳(YYYY-MM-DD HH:II:SS)。 RDBMS具有操作日期的功能,如果您確實需要unix時間戳(我從來不會這樣做,TBH),則可以使用UNIX_TIMESTAMP函數。

2

使用unix時間有很多非常好的理由。良好的數據庫設計極大地影響了運行數據庫和網站的成本,特別是繁忙的數據庫和網站。

我知道的最好情況是...... 一個非常繁忙的服務器,需要存儲時間數據,但實際訪問時間數據的次數與實際進行的讀取和寫入次數相比很少分貝。它需要cpu資源來處理所有時間數據的操作,所以除非你絕對必須這樣做。

一個真實的例子是我自己的。我們需要4個前端Web服務器,並將增加更多。他們也很老,需要更新。查看6臺需要更換的服務器,這將花費我們一大筆錢。決定看看我們在做什麼。我們現在有2臺前端服務器,而不是4臺或6臺。優化數據庫結構和查詢以及插入和讀取數據的代碼。

一個考慮到您的確切考慮的例子...更改了1行php代碼,將時間列更改爲unix而不是yyyy-dd-mm hh:mm:ss,在時間列中添加了一個索引,一個操作從0.08秒開始到完成0.00031秒。 對cpu資源的多重影響是巨大的。下一個排隊的操作執行得更快......等等

這就是爲什麼人們有數據庫設計師的工作......這真的很重要。

當然,如果你的網站很慢,不忙..可能沒有人會注意到。 但是,如果你是成功的,它會很重要。 如果你有一個繁忙的網站,並且你的服務器緩慢......看看這樣的事情。你可能不需要一個新的盒子或更多的內存,你可能需要清理代碼並優化分貝。

時間戳,它們的形式以及它們的使用和存儲方式DO MATTER。