2009-08-20 60 views
1

我的桌子上有一個名爲X的字段,我存儲了unixtime(php - > time())。 我的問題是:Unixtime&mysql

如何列出所有月份從我的DB,是這樣的:6. 2009 8. 2009等。

我的第二個問題是:

哪有我做了一個查詢,列出所有的信息基於一個月和一年在同一領域X(我存儲unixtime),我知道這是行不通的,但瑪比,你可以更好地理解它:其中date = '06 .2009'

任何解決方案?

回答

1
  • 列出所有月份:

    SELECT * FROM MyTable 
    WHERE EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) = 200906; 
    
+0

第二個查詢中的WHERE子句是否需要全表掃描? – 2009-08-20 00:50:22

+0

是的,我相信。您應該使用EXPLAIN來分析查詢,以確定MySQL的優化器如何處理它。 – 2009-08-20 00:59:32

1

要回答你的第一個問題,你會跟這樣做:

SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) FROM MyTable; 
  • 返回給定的一年&月份的所有行分組:

    SELECT FROM_UNIXTIME(timestamp_column, '%c.%Y') AS month, some_other_column FROM table_name GROUP BY month; 
    

    至於你的第二個問題,這取決於你想要做什麼。例如:

    SELECT AVG(payment), SUM(*), FROM_UNIXTIME(timestamp_column, '%c.%Y') AS month, some_other_column FROM table_name WHERE timestamp_column BETWEEN UNIX_TIMESTAMP(200906) AND UNIX_TIMESTAMP(200907) - 1 GROUP BY month; 
    

    會返回付款的平均值和每組的行數(總和)。

    要從具體的時間表得到不分組信息,降低了查詢,像這樣:

    SELECT payment, some_other_column FROM table_name WHERE timestamp_column BETWEEN UNIX_TIMESTAMP(200906) AND UNIX_TIMESTAMP(200907) - 1; 
    
  • 1

    試試這個

    1. SELECT FROM_UNIXTIME(X, '%M%Y')FROM表GROUP BY FROM_UNIXTIME(X, '%米。%Y')

    2. SELECT * FROM TABLE WHERE FROM_UNIXTIME(X, '%米。%Y')= '06.2009'

    再見