Лучший способ хранить значения временного интервала в MySQL? - PullRequest
7 голосов
/ 09 октября 2009

Глупая легкая проблема, но я не смог найти элегантного решения. Я хочу хранить временные интервалы в столбцах MySQL, например:

1:40 (на один час, 40 минут) 0:30 (30 минут).

Тогда сможете запускать запросы, суммируя их. Прямо сейчас я сохраняю их как значения INT (1.40), но мне нужно сделать сложение вручную (если я не пропущу более простой способ).

Тип столбца TIME хранит только до 900 часов (я думаю, примерно), так что это (почти) бесполезно для меня, так как я отслеживаю свыше сотен тысяч часов (я сохраняю одно поле с суммированием множества разных записей ).

Спасибо!

Ответы [ 5 ]

9 голосов
/ 09 октября 2009

хранит только минуты, поэтому 1:40 сохраняется как 100. Это облегчает сложение: 100 + 30 = 130. Когда вы выводите на экран, делайте математику для преобразования обратно в часы: минуты130 минут -> 2: 10.

6 голосов
/ 09 октября 2009

Я бы просто сохранил их в поле INT в виде секунд или минут (или любого другого минимального значения времени, с которым вы работаете).

Например, вы хотите сохранить следующее значение времени 1 час 34 мин 25 секунд:

Это 5665 секунд. Поэтому просто сохраните значение 5665 в поле INT

Позже предположим, что вы хотите сохранить значение времени 56 минут 7 секунд:

Это 3367 секунд.

Подведем итоги позже: 5665 + 3367 = 9032 секунды

Переведите это обратно в часы, минуты, секунды, и вы получите 2 часа 30 минут 32 секунды. Да, вам нужно выполнить математику, чтобы выполнить преобразование, но это очень простое вычисление, и оно совсем не машиноемкое, поскольку вы делаете это только один раз, либо перед сохранением INT, либо один раз, после получения INT.

5 голосов
/ 09 октября 2009

Вы можете определенно использовать поле int для этого, тем более что MySQL предоставляет функции DATE_ADD и DATE_SUB для использования целочисленных единиц времени наряду с типами даты и даты и времени в искусстве даты.

Например, если у вас есть столбец даты и времени eventDateTime и столбец продолжительности durationMinutes, вы можете рассчитать конечное время и дату, используя:

DATE_ADD(eventDateTime,INTERVAL durationMinutes MINUTE)
0 голосов
/ 31 августа 2010

Я знаю, что это не тот промежуток времени, о котором вы говорите, когда я, когда я искал вокруг, был о единственном уместном вопросе SO, который я нашел, поэтому, чтобы помочь другим потерянным душам, таким как я, я думал, что опубликую что Я делаю сейчас.

Я храню длину подписки, которая вместо точных значений, таких как «количество секунд» или даже минут, составляет либо дней , либо месяцев . Так что в моем случае у меня есть INT «duration» и ENUM «duration_unit» («дни», «месяцы»).

Так что для подписки «6 месяцев» вместо того, чтобы пытаться подсчитать, сколько минут будет в 6 месяцах (что зависит от того, о каких 6 месяцах вы говорите), я просто храню «6» и «месяцев».

С помощью метода PHP mktime () проще и точнее рассчитать временные интервалы +6 месяцев.

0 голосов
/ 09 октября 2009

Если вы хотите хранить их как часы и, таким образом, сохранять целое число маленьким, вы можете взять количество минут и разделить на 60.

То есть 1:40 становится 100/60 = 1,66, а 30 становится 30/60 = .5. Теперь вы можете просто добавить их как обычно:

  1.66 + .5 =  2.16

и тогда у вас есть количество часов в целом, а десятичная часть - это количество минут свыше 60, так что это будет

   .16 * 60 = 10

так что 2: 10

Ваш следующий лучший вариант - посмотреть, сможет ли MySQL использовать base60.

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