Запрос PHP MySQL- группировка по дате в поле datetime

#php #mysql #datetime

#php #mysql #datetime

Вопрос:

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

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

Чтобы решить эту проблему, я хочу подсчитать общее количество строк и отсортировать по ДАТЕ в поле 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-м запросом? Разве это не то, чего вы хотите? Если вы отображаете даты и хотите, чтобы они были упорядочены, просто добавьте ORDER BY start_date в конец 2-й.

2. Это упорядочило бы по точной дате-времени. Datetime переходит ко второму — нет двух одинаковых. Это должно группироваться только по дате, не включая время.

Ответ №1:

Если ваш start_date столбец имеет тип MySQL datetime, вы могли бы использовать следующее:

 $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 «Извлекает часть даты из выражения date или datetime»
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date

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