2013-01-18 68 views
0

我希望顯示按月分組的一組記錄的數量,月份和年份。我正在使用以下查詢,然後使用PHP來顯示數據。按月分組記錄

SELECT COUNT(*), YEAR(award_date) AS award_date_year, MONTH(award_date) AS award_date_month 
FROM projects_sell 
GROUP BY YEAR(award_date),MONTH(award_date) ASC 

我會更好使用以下查詢,並使用PHP從datetime中提取月份和年份嗎?我非常傾向於這樣做,我會解釋我對「更好」的解釋。我一次只顯示100條記錄,只要兩個解決方案合理密切,速度就不是問題。我的主要原因是,因爲我也有時顯示award_date格式化的日期,我希望使用PHP而不是MySQL來格式化日期,並希望將我所有的格式保留在一個位置。我不會使用這種方法的唯一原因是,如果award_date不在給定的月份/年內,或者沒有在award_date上使用某種聚合函數會導致某種問題。

SELECT COUNT(*), award_date 
FROM projects_sell 
GROUP BY YEAR(award_date),MONTH(award_date) ASC 
+0

當然,如果你不關心哪個award_date得到顯示! – Strawberry

+0

@Strawberry。我一直在測試後面的代碼,並且顯示的award_date總是在給定的年份/月內,並且似乎是最接近該月的第一天的那個。情況並非總是如此嗎? – user1032531

+0

它不能保證。 – Strawberry

回答

0

由於年份和月份從award_date提取,award_data總是落在年份和月份之內。

但是,由於您只按年份和月份分組,因此MySQL可能會選擇任何日期。因此,如果2012年5月每天都有獎勵,那麼award_date可以是結果查詢中的這30個日期中的任何一個。沒有辦法確定它會是哪一個。

因此,我認爲在查詢中返回年份和月份會更乾淨,因爲查詢結果僅基於那些日期而不是確切日期。

+0

爲什麼你認爲它更清潔?如果我不在乎那一天,只有月份和年份,不會有'$ date->格式(「F」)。' '。$ date-> format(「Y」)'總是正確的? – user1032531

+1

但是你的查詢*將會返回一天 - 實際上或多或少都是隨機的 - 那就是對它的「乾淨」。但是,如果你不關心這一點,並且返回一些無用的數據以使其顯示其他數據更容易一點,那麼你可以使用日期。它會起作用,只有你必須記住那一天毫無意義。我會投反對票,因爲有一天你忘了,或者別人觸摸你的代碼,誰不知道在第一個地方。那天,你有一個網站說你5月17日贏得了50個獎項。最糟糕的是,第二天會說5月23日。 – GolezTrol

+0

很好。謝謝 – user1032531

0

使用PHP DATE()並存儲通過該函數的值。

<?php 
function myAwardDate($myDate) 
{ 
    echo date("Y/m/d",$myDate) . "<br>"; 
    echo date("Y.m.d",$myDate) . "<br>"; 
    echo date("Y-m-d",$myDate); 
} 
?> 

將您的Award_Date字符串傳遞到此日期函數中,然後獲得任何日期格式。

+0

因此,您建議僅將給定月份/年內的日期時間從MySQL傳遞到PHP? – user1032531