Работа со временем

N3K

Новичок
Работа со временем

Вообщем появилась у мнея проблемма. Мне надо построить запрос к базе, где хранится данные в виде 'm:s', где m - минуты, s - секунды. Тип данных - CHAR(15)
Надо построить запрос к таблице так, что б вывело сумму этих полей в таком же виде, как и хронятся ани.(т.е. запрос вида "SELECT SUM(REPLACE(_duration,':','.')) FROM p_song" неверный т.к. считать начаниет не до 60 минут\секунд а до 100.
Подскажите, кто сталкивался с этим, как решить даннут проблемму.
 

Gas

может по одной?
нужно сделать по-человечески - хранить количество секунд в int'е
 

N3K

Новичок
Нет возможности. База данных загружается с сервера раз в некоторое время. Изменять её нельзя.
 

Gas

может по одной?
Изменять её нельзя
не верю, ну ладно.

ты можешь на любом известном тебе языке программирования сложить подобные 2 строки, например, '2:45' и '3:30' ?
Если нет, то и на sql'е тебе тоже пока рано писать подобное.
 

N3K

Новичок
Могу, вот только если я буду делать это в пхп - то у меня получается лишние 100 запросов к бд, т.к. мне надо подсчитать кол-во длинны песен для каждого из 100 музыкальных альбомов на одной странице.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
N3K
1. Ненадо хранить длительность в строках.

2. Ты данные для альбомов каждый раз сумируешь?
:confused:
 

Фанат

oncle terrible
Команда форума
N3K
читай в мане функции работы с датой временем
 

programmer_2006

Новичок
1. Ненадо хранить длительность в строках.

2. Ты данные для альбомов каждый раз сумируешь?
:confused:
Присоединяюсь к обсуждению так как эта часть связанна с моим проектом.

1. Базу мы получаем готовую и какая она есть с такой и работаем. Можно конечно в момент импорта править все, но геморно это.
2. Есть страница с топовыми альбомами их там 100 для каждого надо получить продолжительность и 100 запросов это не выход даже если использовать кэширование.

-~{}~ 01.10.08 17:24:

Автор оригинала: *****
N3K
читай в мане функции работы с датой временем
Функций в мане довольно много. Часть уже просмотрели так же как и функции по работе со строками, но возможно на форуме ответ дадут быстрее.
 

Фанат

oncle terrible
Команда форума
Так и представляю себе картину:
Сидят потные программисты, вдвоем крутят колесо мыши, прокручивая страницу со списком функций. На половине страницы утомились, пошли покурить, и попросить помощи.

Ну, вы когда покурите, вотрые полстраницы досмотрите, все-таки.
 

programmer_2006

Новичок
Автор оригинала: *****
Так и представляю себе картину:
Сидят потные программисты, вдвоем крутят колесо мыши, прокручивая страницу со списком функций. На половине страницы утомились, пошли покурить, и попросить помощи.

Ну, вы когда покурите, вотрые полстраницы досмотрите, все-таки.
Программист один, я иногда помогаю по мере возможности т.к. у меня свои задачи и времени крутить двоем мышку и читать функции нет. Но другого ответа от тебя я не ожидал :)
 

duburlan

Новичок
этот запрос вернет общюю продолжительность в секундах
----
Код:
SELECT 
  SUM(
     SUBSTRING(duration, 1, LOCATE(':', duration) - 1) * 60 +    
     SUBSTRING(duration, LOCATE(':', duration) + 1, 
         LENGTH(duration)) 
  )
AS CountSek

FROM `p_song`
----------


П.С. ну а в идеале - поменяйте в таблице тип на int - и храните изначально в секундах... а с переводом в минуты и часы - PHP справится на ура
 

Gas

может по одной?
duburlan
функцией о которой говорит Фaнат короче, но у меня сначала в уме тоже бы похожий вариант, только вместо первого substring поставить left, целых несколько символов сократить можно :)
 

Фанат

oncle terrible
Команда форума
- http://www.mysql.ru/docs/pautov/sql.htm#MSfunc - специально рылся рылся
жесть, жестяная жесть.
найти в интернете кучку говна и самозабвенно в ней рыться.

и дело не в том, что функция не идеал.
а в том, что вопрос на форуме надо задавать только после того, как ты читал мануал, и из вопроса это видно.
и это не прихоть форума. это основы профессиональной работы.
 
Сверху