imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 14.08.2006, 14:18     # 1
uerter
Member
 
Аватар для uerter
 
Регистрация: 07.01.2004
Сообщения: 273

uerter Молодецuerter Молодецuerter Молодец
вопрос по поводу mysql

можно ли средствами mysql сделать следующее
у нас есть поля start, end, total
формата: 00:00:00 ну истественно end-start=total
так вот ... можно ли при помощи запроса заново пересчитать total?
__________________
Жизнь движняк
uerter вне форума  
Старый 14.08.2006, 14:25     # 2
Naked
::VIP::
 
Аватар для Naked
 
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194

Naked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked Сэнсэй
если правильно понял:
UPDATE table SET total=end-start
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным.
Naked вне форума  
Старый 14.08.2006, 14:37     # 3
uerter
Member
 
Аватар для uerter
 
Регистрация: 07.01.2004
Сообщения: 273

uerter Молодецuerter Молодецuerter Молодец
да .. если бы там был формат просто int то да ...
а тут формат данных 00:00:00 ... при запросе ничего не апдейтится ...
вот запрос

update `Hourregistration` set `H-totaltime`=`H-endtime`-`H-starttime` where `H-ID`='206573'


start = 11:55:00
end = 12:44:00
в total записывается нули 00:00:00

значит не все так уж нормально работает ....
можно было бы все это при помощи РНР сделать ... но мне надо именно при помощи запроса
__________________
Жизнь движняк
uerter вне форума  
Старый 14.08.2006, 14:43     # 4
Naked
::VIP::
 
Аватар для Naked
 
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194

Naked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked Сэнсэй
только что создал таблицу, тип TIME, begin = 09:00:00, end = 12:00:00
UPDATE test SET total = begin - end

в итоге в total записано -03:00:00

Проверь свой H-ID
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным.
Naked вне форума  
Старый 14.08.2006, 14:49     # 5
uerter
Member
 
Аватар для uerter
 
Регистрация: 07.01.2004
Сообщения: 273

uerter Молодецuerter Молодецuerter Молодец
ты прав ... фенкс
__________________
Жизнь движняк
uerter вне форума  
Старый 14.08.2006, 14:58     # 6
smap
Junior Member
 
Аватар для smap
 
Регистрация: 14.10.2002
Адрес: Samara
Сообщения: 84

smap Путь к славе только начался
Хотел предложить такое:
UPDATE test SET total = SEC_TO_TIME( TIME_TO_SEC( end ) - TIME_TO_SEC( begin ) )
ну если предыдущие получилось, тогда ето лишнее :/
smap вне форума  
Старый 14.08.2006, 15:27     # 7
uerter
Member
 
Аватар для uerter
 
Регистрация: 07.01.2004
Сообщения: 273

uerter Молодецuerter Молодецuerter Молодец
о! это вариант интересный! респект тебе!

тут еше одн вопрос возник ..
вернемся к тому же total
в табле Hourregistration хочу просумировать все total и записать их в другую ...одним запросом можно?
__________________
Жизнь движняк
uerter вне форума  
Старый 14.08.2006, 15:53     # 8
smap
Junior Member
 
Аватар для smap
 
Регистрация: 14.10.2002
Адрес: Samara
Сообщения: 84

smap Путь к славе только начался
Кажись что то в этом роде:
UPDATE table_sum_total SET sum_total = SUM( Hourregistration.total )
smap вне форума  
Старый 14.08.2006, 16:34     # 9
uerter
Member
 
Аватар для uerter
 
Регистрация: 07.01.2004
Сообщения: 273

uerter Молодецuerter Молодецuerter Молодец
UPDATE `Hourregistration` ,
`Students` SET `Students`.`ST-TotalESFHours` = SUM( `Hourregistration`.`H-totaltime` ) WHERE `Hourregistration`.`H-ST-ID` = '61' && `Hourregistration`.`H-esf` = '1' && `Students`.`ST-ID` = '61'

Ответ MySQL: Документация
#1111 - Invalid use of group function

сделал следующее
Цитата:
UPDATE `Students` SET `ST-TotalESFHours` = ( SELECT SUM( `H-totaltime` )
FROM `Hourregistration`
WHERE `H-ST-ID` = '64' )
WHERE `ST-ID` = '64'
но вложеные запросы мне не очень нравятся ... можно ли оптимизировать ?
__________________
Жизнь движняк
uerter вне форума  
Старый 15.08.2006, 10:24     # 10
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
uerter:
но вложеные запросы мне не очень нравятся ... можно ли оптимизировать ?
В данном случае это всеравно 2 запроса должно быть, если не нравится вложенный (с чего бы вдруг кстати?), то можно сначала сохранить сумму в переменную, а потом ее записать. Но не вижу смысла этого делать, если со вложенным работает - с ним логичнее и нагляднее.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 15.08.2006, 18:07     # 11
uerter
Member
 
Аватар для uerter
 
Регистрация: 07.01.2004
Сообщения: 273

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

возвращаемся к нашим баранам ))
Цитата:
select DISTINCT SQL_CALC_FOUND_ROWS `H-date` from `Hourregistration` where `H-deleted`='1' && `H-G-ID`='14'
возвращается список H-date
дальше по каждому H-date я делаю следующее
Цитата:
select SQL_CALC_FOUND_ROWS * from `Hourregistration` where `H-deleted`='1' && `H-G-ID`='14' && `H-date`='2005-09-07'
Цитата:
select sec_to_time(sum(time_to_sec(`H-totaltime`))) from `Hourregistration` where `H-deleted`='1' && `H-G-ID`='14' && `H-date`='2005-09-07' && `H-esf`=1
Цитата:
select sec_to_time(sum(time_to_sec(`H-totaltime`))) from `Hourregistration` where `H-deleted`='1' && `H-G-ID`='14' && `H-date`='2005-09-07' && `H-esf`=0
все это затягивается на 1.5 - 2 сек ... сами запросы ... как обьеденить никто не подскажет?

с разу говорю ... дело идет о тысечах записей ...

можно ли что-то такое сделать как for each ну или чо-то в роде того в самом запросе
__________________
Жизнь движняк
uerter вне форума  
Старый 24.08.2006, 13:39     # 12
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
uerter:
хм .... да но вложеные запросы лучше избегать ... так как они жутко все тормозят
Не больше чем 2 таких же запроса последовательно.

Цитата:
uerter:
возвращаемся к нашим баранам ))
Ну что-то подобное должно быть:
Код:
SELECT DISTINCT h2.*,
	(
	SELECT sum(`H-totaltime`)
	FROM `Hourregistration` as h3
	WHERE	h3.`H-deleted`='1'
		 AND h3.`H-G-ID`=h1.`H-G-ID`
		 AND h3.`H-date`=h1.`H-date`
		 AND h3.`H-esf`=1
	) as `Sum1_H_esf1`,
	(
	SELECT sum(`H-totaltime`)
	FROM `Hourregistration` as h3
	WHERE	h3.`H-deleted`='1'
		 AND h3.`H-G-ID`=h1.`H-G-ID`
		 AND h3.`H-date`=h1.`H-date`
		 AND h3.`H-esf`=0
	) as `Sum2_H_esf0`
FROM	`Hourregistration`as h1 INNER JOIN
	`Hourregistration`as h2 ON (h2.`H-date` = h1.`H-date` AND h2.`H-deleted` = '1' AND h2.`H-G-ID`=h1.`H-G-ID`)
WHERE h1.`H-deleted`='1' && h1.`H-G-ID`='14'

Цитата:
uerter:
можно ли что-то такое сделать как for each ну или чо-то в роде того в самом запросе
Можно. На серверных курсорах. Но, этого строго не рекомендуется делать, если можно обойтись запросами на уровне наборов данных, типа решения выше.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  


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

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 05:42.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.