#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
строку, если хотите увидеть все.