Проблема с MySQL суммы нескольких дат - PullRequest
3 голосов
/ 12 октября 2011

В моей базе данных время хранится как «datetime» (я не знаю, является ли это проблемой или нет - я пробовал и datetime, и метку времени).Структура выглядит так:

ID | START_DATE          | END_DATE
1  | 2011-10-10 08:15:00 | 2011-10-10 12:00:00
2  | 2011-10-11 09:00:00 | 2011-10-11 14:30:00
3  | 2011-10-12 08:45:00 | 2011-10-12 10:15:00

Я пытаюсь получить общее количество секунд между временем начала и окончания.Вот что у меня есть:

$times = mysql_query("SELECT SUM(TIMEDIFF(end_date, start_date))
AS timesum FROM schedules");

$timetotal = mysql_fetch_assoc($times);

echo $timetotal['timesum'];

Теперь сумма должна быть 38700, но когда я запускаю приведенный выше запрос, он возвращает 100500. Что не так с запросом?

Ответы [ 2 ]

8 голосов
/ 12 октября 2011

Нельзя суммировать значения даты и времени - сначала нужно преобразовать их в секунды ....

SELECT SUm(time_to_sec(TIMEDIFF(end_date, start_date)))
AS timesum FROM schedules
2 голосов
/ 12 октября 2011

Вам необходимо преобразовать TIMEDIFF в секунды, используя функцию TIME_TO_SEC, чтобы правильно получить сумму в секундах:

$times = mysql_query("SELECT SUM(TIME_TO_SEC(TIMEDIFF(end_date, start_date)))
         AS timesum FROM schedules")

Без явного преобразования в секунды с TIME_TO_SEC the SUM функция обрабатывает TIMEDIFF как число с плавающей запятой.Попробуйте первый ряд, чтобы понять, что я имею в виду:

$times = mysql_query("SELECT SUM(TIMEDIFF(end_date, start_date))
         AS timesum FROM schedules WHERE ID='1'")

должно дать:

$times = 34500.000000
...