2011-10-13 194 views
3

我一直在搜索,我知道有類似的問題,但他們都沒有回答這個問題。PHP MySQL查詢 - 在日期時間字段中按日期分組

我正在嘗試計算員工在給定時間表上工作的總天數。爲此,我計算了員工在「計劃」表中顯示的總行數。只有當員工在同一天安排兩次時,我們纔會遇到問題。

爲了解決這個問題,我想在DATETIME字段中計算總行數並按DATE排序。

目前查詢:

$days = mysql_query("SELECT emp_id FROM schedules 
        WHERE sch_id = '$sch_id' 
        AND emp_id = '$emp_data[emp_id]'"); 

$tot_days = mysql_num_rows($days); 

我想將它更改爲:

$days = mysql_query("SELECT emp_id FROM schedules 
        WHERE sch_id = '$sch_id' 
        AND emp_id = '$emp_data[emp_id]' 
        GROUP BY start_date"); 
// "start_date" is a datetime field. Need to sort by date only YYYY-MM-DD 
$tot_days = mysql_num_rows($days); 

有什麼想法?

+0

那麼第二個查詢有什麼問題?這不是你想要的嗎?如果您正在顯示日期並希望訂購,只需將'ORDER BY start_date'添加到第二個日期的末尾即可。 –

+0

這將按確切的日期時間排序。日期時間下降到第二個 - 沒有兩個會相同。這隻需要將日期分組,但不包括時間。 – Oseer

回答

2

如果您start_date列是MySQL的日期時間類型,可以使用下列內容:

$days = mysql_query("SELECT start_date, count(*) FROM schedules 
       WHERE sch_id = '$sch_id' 
       AND emp_id = '$emp_data[emp_id]' 
       GROUP BY DATE(start_date) 
       HAVING count(*) > 1 
       ORDER BY DATE(start_date)"); 

日期函數「提取日期或日期時間表達式的日期部分」 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date

這將僅給出那些在給定日期內被考慮的emp_id被多次使用的行。如果您想查看全部內容,請刪除HAVING行。

+0

太棒了!謝謝。 – Oseer