PHP MySQL запрос - группа по дате в поле даты и времени - PullRequest
3 голосов
/ 13 октября 2011

Я искал и знаю, что есть похожие вопросы, но ни один из них, похоже, не отвечает на этот конкретный вопрос.

Я пытаюсь подсчитать общее количество дней, в течение которых сотрудник работалпо заданному графику.Для этого я подсчитываю общее количество строк, которые сотрудник отображает в таблице «Расписания».Только мы столкнемся с проблемой, если сотрудник запланирован дважды в один и тот же день.

Чтобы решить эту проблему, я хочу подсчитать общее количество строк и отсортировать по дате в поле DATETIME.Текущий запрос:

$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);

Есть мысли?

1 Ответ

2 голосов
/ 13 октября 2011

Если ваш столбец 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)"); 

Функция DATE «Извлекает часть даты из выражения даты или даты и времени» http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date

Это даст вам только те строки, в которых рассматриваемый emp_id используется более одного раза за данную дату.Удалите строку HAVING, если хотите увидеть все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...