URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9027
[ Назад ]

Исходное сообщение
"Как реализовать переменную $date в bash скрипте"

Отправлено madmax11 , 10-Фев-11 08:21 
Уважаемые знатоки perl, встала задача вытаскивать определенные данные из таблиц mysql еженедельно по понедельникам, было решено написать bash скрипт и засунуть его в крон по понедельникам, ломаю голову как сделать чтобы каждую неделю в переменной "and time>=" менялось значение за предыдущую неделю, была идея выводить командой date, но вот как высчитать описание недели?
Пример запроса:

select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1 or locate('***',***)=1) and time>='2010-12-20 00:00:00' and time<'2010-12-27 00:00:00' group by *,* order by time;


Содержание

Сообщения в этом обсуждении
"Как реализовать переменную $date в bash скрипте"
Отправлено phpcoder , 10-Фев-11 08:47 
> Уважаемые знатоки perl, встала задача вытаскивать определенные данные из таблиц mysql еженедельно
> по понедельникам, было решено написать bash скрипт и засунуть его в
> крон по понедельникам, ломаю голову как сделать чтобы каждую неделю в
> переменной "and time>=" менялось значение за предыдущую неделю, была идея выводить
> командой date, но вот как высчитать описание недели?
> Пример запроса:
> select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1 or locate('***',***)=1)
> and time>='2010-12-20 00:00:00' and time<'2010-12-27 00:00:00' group by *,* order by
> time;

date -d 'week ago' попробуйте (поищите примеры в info date, кажется), но я бы лучше воспользовался функциями вашей СУБД. Во всяком случае, в MySQL такое точно возможно.


"Как реализовать переменную $date в bash скрипте"
Отправлено madmax11 , 10-Фев-11 08:55 
>[оверквотинг удален]
>> крон по понедельникам, ломаю голову как сделать чтобы каждую неделю в
>> переменной "and time>=" менялось значение за предыдущую неделю, была идея выводить
>> командой date, но вот как высчитать описание недели?
>> Пример запроса:
>> select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1 or locate('***',***)=1)
>> and time>='2010-12-20 00:00:00' and time<'2010-12-27 00:00:00' group by *,* order by
>> time;
> date -d 'week ago' попробуйте (поищите примеры в info date, кажется), но
> я бы лучше воспользовался функциями вашей СУБД. Во всяком случае, в
> MySQL такое точно возможно.

Да, но ведь еще нужно инсертить эти данные в "and time>=" и причем "and time>=" две штуки, описывающие неделю, как же именно проинсертить нужные данные в две одинаковых "and time>=", по поводу mysql к сожалению пока вариантов не вижу, но погуглю, спасибо за совет.



"Как реализовать переменную $date в bash скрипте"
Отправлено phpcoder , 10-Фев-11 09:06 
> Да, но ведь еще нужно инсертить эти данные в "and time>=" и
> причем "and time>=" две штуки, описывающие неделю, как же именно проинсертить
> нужные данные в две одинаковых "and time>=",

Не понял вас. Вы не знаете как результат команды вставить в переменную в шелле? Что не получается или не понятно?

printf "select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1 or locate('***',***)=1) and time>='%s' and time<'%s' group by *,* order by time;" "$(date -d 'week ago' '+%F 00:00:00')" "$(date '+%F 00:00:00')" | mysql -u user -ppassword database -h host

> по поводу mysql к
> сожалению пока вариантов не вижу, но погуглю, спасибо за совет.

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functio...



"Как реализовать переменную $date в bash скрипте"
Отправлено madmax11 , 10-Фев-11 09:30 
>[оверквотинг удален]
>> нужные данные в две одинаковых "and time>=",
> Не понял вас. Вы не знаете как результат команды вставить в переменную
> в шелле? Что не получается или не понятно?
> printf "select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1
> or locate('***',***)=1) and time>='%s' and time<'%s' group by *,* order by
> time;" "$(date -d 'week ago' '+%F 00:00:00')" "$(date '+%F 00:00:00')" |
> mysql -u user -ppassword database -h host
>> по поводу mysql к
>> сожалению пока вариантов не вижу, но погуглю, спасибо за совет.
> http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functio...

Мне непонятно как в строку запроса в bash скрипте к мускулю типа select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1 or locate('***',***)=1) and time>='2010-12-20 00:00:00' and time<'2010-12-27 00:00:00' group by *,* order by time; в двух параметрах and time>='2010-12-20 00:00:00' and time<'2010-12-27 00:00:00 описывающих неделю, сделать так, чтобы каждую неделю они возрастали по числам на 7 дней.


"Как реализовать переменную $date в bash скрипте"
Отправлено phpcoder , 10-Фев-11 09:44 
> сделать так, чтобы каждую неделю они возрастали по числам на 7 дней.

Используйте текущую дату (NOW(), CURDATE()) как точку отсчета.



"Как реализовать переменную $date в bash скрипте"
Отправлено madmax11 , 10-Фев-11 09:54 
>> сделать так, чтобы каждую неделю они возрастали по числам на 7 дней.
> Используйте текущую дату (NOW(), CURDATE()) как точку отсчета.

Большое спасибо за советы, ответ нашел здесь=) http://www.opennet.me/openforum/vsluhforumID9/8991.html


"Как реализовать переменную $date в bash скрипте"
Отправлено madmax11 , 10-Фев-11 14:12 
>>> сделать так, чтобы каждую неделю они возрастали по числам на 7 дней.
>> Используйте текущую дату (NOW(), CURDATE()) как точку отсчета.

И все же, проблема до конца не решилась, в целом в запросе к мускулю добился заполнения текущей даты в запросе, получилось примерно следующее:

select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1 or locate('***',***)=1) and time>='2010-12-20 00:00:00' and time<'СURDATE() 00:00:00' group by *,* order by time;  то есть я добился результата по текущей дате, но вот как быть со первым значением  and time>='2010-12-20 оно должно уменьшаться ровно на семь дней от CURDATE(), помогите советом, весь мосг себе изломал=(  



"Как реализовать переменную $date в bash скрипте"
Отправлено phpcoder , 10-Фев-11 14:24 
> select day(time),hour(time), sum(msg_len) from info where (locate('***',***)=1 or locate('***',***)=1)
> and time>='2010-12-20 00:00:00' and time<'СURDATE() 00:00:00' group by *,* order by
> time;  то есть я добился результата по текущей дате, но
> вот как быть со первым значением  and time>='2010-12-20 оно должно
> уменьшаться ровно на семь дней от CURDATE(), помогите советом, весь мосг
> себе изломал=(

На лицо незнание SQL :( Почитайте что-нибудь по этой теме, либо, на худой конец, поищите примеры работы с датой и временем в гугле.

Я могу вам подсказать, но не буду потому что делать за вас у меня нет времени, объяснять тоже. Вы либо должны сами разобраться, либо обратитесь к более квалифицированному программисту/администратору. (Есть ещё вариант подождать других участников форума, которые дадут вам ответ "на тарелочке с голубой каёмочкой".)


"Как реализовать переменную $date в bash скрипте"
Отправлено madmax11 , 10-Фев-11 15:03 
>[оверквотинг удален]
>> вот как быть со первым значением  and time>='2010-12-20 оно должно
>> уменьшаться ровно на семь дней от CURDATE(), помогите советом, весь мосг
>> себе изломал=(
> На лицо незнание SQL :( Почитайте что-нибудь по этой теме, либо, на
> худой конец, поищите примеры работы с датой и временем в гугле.
> Я могу вам подсказать, но не буду потому что делать за вас
> у меня нет времени, объяснять тоже. Вы либо должны сами разобраться,
> либо обратитесь к более квалифицированному программисту/администратору. (Есть ещё вариант
> подождать других участников форума, которые дадут вам ответ "на тарелочке с
> голубой каёмочкой".)

Да, не спорю, у меня нету знаний в области баз данных, поскольку это не совсем моя работа, просто в данный момент возникла необходимость решить вопрос, а кроме меня как бы некому, в общем вы дали мне намек на счет функций mysql, а я уже закончил=) при помощи DATE_SUB(CURDATE(), INTERVAL 7 DAY) в первом случае, и DATE_SUB(NOW(), interval 1 day) во втором случае, Спасибо за помоЩь=))