- Эээ, дружище, причем тут база и перл Нам бы узнать что это за база - MySQL, Pos, курил (?), 01:16 , 27-Мрт-17 (1)
Эээ, дружище, причем тут база и перл? Нам бы узнать что это за база - MySQL, PostgreSQL, SQLite, CSV может. Плюс, нужно еще узнать какая структура у базы, потом уже можно будет помочь Вам..Скажем, если там MySQL и простая таблица, можно сдлеать такой запрос например: SELECT call_date, AVG(call_duration) AS average_duration FROM calls WHERE call_date >= DATE_SUB(NOW(), INTERVAL 30 DAY) GROUP BY call_date
- База MySQL Таблица выглядит вот так https drive google com file d 0Byy2RDccu, HattabbI4 (ok), 07:22 , 27-Мрт-17 (2) –1
База MySQL. Таблица выглядит вот так: https://drive.google.com/file/d/0Byy2RDccuWnTdmQ5TXlSVm1iNkV... сделать нужно что-то типа этого: https://docs.google.com/spreadsheets/d/1Dtby-VeUnt8Wg_WEYqeD... на данный момент есть вот что: #!/usr/bin/perl use Date::Calc; use CGI::Carp qw(fatalsToBrowser); ($mday,$mon,$year,) = localtime(time); $year=$year+1900; $mon=$mon+1; if ($mon<10) { $mon="0".$mon; } if ($mday<10) { $mday="0".$mday; } $hour=$hour-1; if ($hour<10) { $hour="0".$hour; } print "Content-type: text/html; charset=utf-8\n\n"; print " <html> <head> <title>Отчет Call-Centr</title> <style> label { display:block; } </style> </head> <body>"; print "$mday.$mon.$year "; print scalar localtime(); # Соединяемся с базой. use DBI; my $dsn='DBI:mysql:testasterisk:localhost'; my $db_user_name='testasterisk'; my $db_password='testpass'; my $dbh=DBI->connect($dsn,$db_user_name,$db_password) || die ("Ошибка: $DBI::errstr"); $dbh->do("SET NAMES utf8"); #делаем выборку по обработанным звонкам дня 1 my $day1 = $mday-30; #пытался сделать по дням print $day5; my $sth = $dbh->prepare(" SELECT wait_time FROM stat WHERE Status='ANSWERED'"); $sth->execute(); $sth->finish(); #делаем выборку по пропущенным звонкам my $swt = $dbh->prepare(" SELECT AVG(wait_time) FROM stat WHERE Status='NO ANSWER'"); $swt->execute(); #находим общее количество не отвеченных звонков my $swtrows = $dbh->prepare(" SELECT wait_time FROM stat WHERE Status='NO ANSWER'"); $swtrows->execute(); #находим максимальное время ожидания при не отвеченном звонке my $swtm = $dbh->prepare(" SELECT MAX(wait_time) FROM stat WHERE Status='NO ANSWER'"); $swtm->execute(); my $sup = $swtrows->rows; my $sup1 = $sth->rows; #сервисные переменные для подсчета звонков my $row = $swt->fetchrow_array(); $sth->finish(); my $row1 = $swtm->fetchrow_array(); $swtm->finish(); $swt->finish(); $swtrows->finish(); $row = sprintf("%.0f",$row); #округляем my $sup2=$sup+$sup1; #общее кол-во звонков print "<table border=1 align=center>"; print "<tr><td>Число</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td> <td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td> <td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td><td>31</td></tr>"; #возможно не правильно в дальнейшем можно поменять print "<tr><td>Общее количество обработанных звонков:</td><td>$sup2</td></tr>"; print "<tr><td>Среднее время ожидания ответа:</td><td>$row</td></tr>"; print "<tr><td>Максимальное время ожидания ответа:</td><td>$row1</td></tr>"; print "<tr><td>Общее количество не отвеченных звонков:</td><td>$sup</td></tr>"; print "<tr><td>Общее количество обработанных звонков:</td><td>$sup1</td></tr>"; print "</table>"; print " </body> </html>"; $dbh->disconnect();
- зачем вываливать сюда мусор с форматированием табличек , Pahanivo (ok), 11:37 , 27-Мрт-17 (4)
зачем вываливать сюда мусор с форматированием табличек?
- Я конечно извиняюсь, но вы на форум заходите для того чтобы помочь другим или хв, HattabbI4 (ok), 11:41 , 27-Мрт-17 (5) –2
> зачем вываливать сюда мусор с форматированием табличек?Я конечно извиняюсь, но вы на форум заходите для того чтобы помочь другим или хвост распускать, вы бы лучше по теме что-то посоветовали конкретное кроме как ссылок на мануалы, которые я и без вас прочитал и придирок к посту, спасибо что к грамматике моей не придрались.
- Я извиняться не буду ибо не за что Если есть проблемы с расчетом даты - да к и , Pahanivo (ok), 11:50 , 27-Мрт-17 (6)
> Я конечно извиняюсь, но вы на форум заходите для того чтобы помочь > другим или хвост распускать, вы бы лучше по теме что-то посоветовали > конкретное кроме как ссылок на мануалы, которые я и без вас > прочитал и придирок к посту, спасибо что к грамматике моей не > придрались.Я извиняться не буду ибо не за что. Если есть проблемы с расчетом даты - да к и оставляй куски с этим кодом. Портянки с html тут каким местом??? Как легко и просто вычитать даты я указал. Мож взять себя в руки, заткнуть фонтан нытья и погуглить что таки такое unix time? Там глядишь и прозрение придет.
- этот крап можно на чистом sh организовать, а не городить CGI сервер причем одни, mr_gfd (?), 19:18 , 03-Апр-17 (17)
этот крап можно на чистом sh организовать, а не городить CGI сервер. причем одним запросом. echo 'SELECT avg(wait_time) as "Wiat time avg", wait_time as "wait_time", max(wait_time) from stat where status="NO ANSWER" and call_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH);' | mysql -uuser -ppasswd а дальше его куда угодно. можно хоть почтой, хоть файлом, хоть в хтмл отформатировать и внешний css навесить для красоты.
- Ты уровень кода глянь для начала if mon 10 mon 0 mon if mday 10 , Pahanivo (ok), 23:47 , 04-Апр-17 (18) –1
Ты уровень кода глянь для начала ))if ($mon<10) { $mon="0".$mon; } if ($mday<10) { $mday="0".$mday; } $hour=$hour-1; if ($hour<10) { $hour="0".$hour; } а это ваще огонь my $day1 = $mday-30; #пытался сделать по дням
- это получается статистика за месяц, а мне нужно за все дни месяцаспасибо так про, HattabbI4 (ok), 17:22 , 06-Апр-17 (21)
> этот крап можно на чистом sh организовать, а не городить CGI сервер. > причем одним запросом. > echo 'SELECT avg(wait_time) as "Wiat time avg", wait_time as "wait_time", max(wait_time) > from stat where status="NO ANSWER" and call_date >= DATE_SUB(NOW(), INTERVAL 1 > MONTH);' | mysql -uuser -ppasswd > а дальше его куда угодно. можно хоть почтой, хоть файлом, хоть в > хтмл отформатировать и внешний css навесить для красоты.это получается статистика за месяц, а мне нужно за все дни месяца спасибо так проще будет, вот бы как-то сделать это только для каждого дня
- это получается что ты ленивый и наглый идиот да простит меня модер который чита, Pahanivo (ok), 12:52 , 08-Апр-17 (24)
> это получается статистика за месяц, а мне нужно за все дни месяца это получается что ты ленивый и наглый идиот (да простит меня модер) который читая про select не удосужился дочитать даже до group by, хотя думаю не читал вообще - потому как не разобраться с тупейшей учебной задачей про селект надо сильно умудрится. в первой попавшейся книжке со 146% вероятностью подобная задачу будет рассмотрена в качестве примера. и да, внизу есть пример с группировкой - но надо ведь так напрячься - скролить и читать.
- фигня какая то понаписано и толком не понятно я так понимаю проблема встала с, Pahanivo (ok), 11:36 , 27-Мрт-17 (3)
> Вопрос в другом, данные нужно выводить за последние 3 дней вот тут > у меня сложности и возникли, сначала хотел из сегодняшней даты вычитать > 30 и потом прибавлять по одному, но получается что я смогу > вычесть только до 1 числа месяца и более того не во > всех месяцах 30 дней.фигня какая то понаписано и толком не понятно ... я так понимаю проблема встала с получением параметра для datetime типа что бы указать его в запросе? если нужно привязываться к дням месяца, месяцу, году и т.д. - сложностей вообще не вижу, читаем ман про временные функции перла. если нужно брать произвольный интервал в любую стороно от произвольной точки времени - лучше сконвертить datetime в unix timestamp (unix time) обсчитать в нем сдвиги, результат сконвертить обратно.
- вообщем правильноеще можно почитать info dateтам есть даже примеры date --date , VladimirV (ok), 18:16 , 27-Мрт-17 (7)
>> Вопрос в другом, данные нужно выводить за последние 3 дней вот тут >> у меня сложности и возникли, сначала хотел из сегодняшней даты вычитать >> 30 и потом прибавлять по одному, но получается что я смогу >> вычесть только до 1 числа месяца и более того не во >> всех месяцах 30 дней. > если нужно привязываться к дням месяца, месяцу, году и т.д. - сложностей > вообще не вижу, читаем ман про временные функции перла. > если нужно брать произвольный интервал в любую стороно от произвольной точки > времени - лучше сконвертить datetime в unix timestamp (unix time) обсчитать > в нем сдвиги, результат сконвертить обратно.вообщем правильно еще можно почитать info date там есть даже примеры date --date='3 days ago'
- gt оверквотинг удален Скажите пожалуйста, каким образом мне связать дату высчи, HattabbI4 (ok), 07:01 , 28-Мрт-17 (8) –1
>[оверквотинг удален] >>> всех месяцах 30 дней. >> если нужно привязываться к дням месяца, месяцу, году и т.д. - сложностей >> вообще не вижу, читаем ман про временные функции перла. >> если нужно брать произвольный интервал в любую стороно от произвольной точки >> времени - лучше сконвертить datetime в unix timestamp (unix time) обсчитать >> в нем сдвиги, результат сконвертить обратно. > вообщем правильно > еще можно почитать info date > там есть даже примеры > date --date='3 days ago' Скажите пожалуйста, каким образом мне связать дату высчитанную перлом и дату из таблицы БД, чтобы поместить высчитанные данные в нужную графу отчета?
- gt оверквотинг удален на мой не искушенный взгляд проблема простая Перестаньте, fantom (ok), 12:16 , 28-Мрт-17 (9)
>[оверквотинг удален] >>> вообще не вижу, читаем ман про временные функции перла. >>> если нужно брать произвольный интервал в любую стороно от произвольной точки >>> времени - лучше сконвертить datetime в unix timestamp (unix time) обсчитать >>> в нем сдвиги, результат сконвертить обратно. >> вообщем правильно >> еще можно почитать info date >> там есть даже примеры >> date --date='3 days ago' > Скажите пожалуйста, каким образом мне связать дату высчитанную перлом и дату из > таблицы БД, чтобы поместить высчитанные данные в нужную графу отчета?на мой не искушенный взгляд проблема простая: Перестаньте работать с датой, как с набором чисел, начните работать с датой как с ДАТОЙ! Вотсобственно и все...
- gt оверквотинг удален к сожалению, понятней не стало , HattabbI4 (ok), 12:21 , 28-Мрт-17 (10) –1
>[оверквотинг удален] >>> вообщем правильно >>> еще можно почитать info date >>> там есть даже примеры >>> date --date='3 days ago' >> Скажите пожалуйста, каким образом мне связать дату высчитанную перлом и дату из >> таблицы БД, чтобы поместить высчитанные данные в нужную графу отчета? > на мой не искушенный взгляд проблема простая: > Перестаньте работать с датой, как с набором чисел, начните работать с датой > как с ДАТОЙ! > Вотсобственно и все...к сожалению, понятней не стало
- Высчитанную даты положить в одну переменную, дату из БД в другую, вставить обе п, Pahanivo (ok), 14:44 , 28-Мрт-17 (11)
> Скажите пожалуйста, каким образом мне связать дату высчитанную перлом и дату из > таблицы БД, чтобы поместить высчитанные данные в нужную графу отчета?Высчитанную даты положить в одну переменную, дату из БД в другую, вставить обе переменные в строку отчета при выводе.
- Так ты его совсем запутаешь, колонка SELECT - это не переменная Даты вычислять н, ACCA (ok), 17:58 , 28-Мрт-17 (12)
>> Скажите пожалуйста, каким образом мне связать дату высчитанную перлом и дату из >> таблицы БД, чтобы поместить высчитанные данные в нужную графу отчета? > Высчитанную даты положить в одну переменную, дату из БД в другую, вставить > обе переменные в строку отчета при выводе.Так ты его совсем запутаешь, колонка SELECT - это не переменная. Даты вычислять нужно в SQL, чтобы иметь Single Source of Truth. SELECT call_date, DATE_SUB(NOW(), INTERVAL 1 MONTH), AVG(call_duration) AS average_duration FROM calls WHERE call_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH) GROUP BY call_date
- gt оверквотинг удален В чем проблема-то Как подставить переменную в sql запрос, VladimirV (ok), 18:21 , 28-Мрт-17 (13)
>[оверквотинг удален] >>> вообще не вижу, читаем ман про временные функции перла. >>> если нужно брать произвольный интервал в любую стороно от произвольной точки >>> времени - лучше сконвертить datetime в unix timestamp (unix time) обсчитать >>> в нем сдвиги, результат сконвертить обратно. >> вообщем правильно >> еще можно почитать info date >> там есть даже примеры >> date --date='3 days ago' > Скажите пожалуйста, каким образом мне связать дату высчитанную перлом и дату из > таблицы БД, чтобы поместить высчитанные данные в нужную графу отчета?В чем проблема-то? Как подставить переменную в sql запрос? Возникает вопрос скрипт приведенный выше чужой? Может поможет http://www.mysql.ru/docs/man/Date_calculations.html http://www.mysql.ru/docs/man/Date_and_time_functions.html http://www.mysql.ru/docs/man/Using_DATE.html
- в ДНК, Pahanivo (ok), 21:45 , 28-Мрт-17 (14) –1
> В чем проблема-то?в ДНК
- взять текущее время в юникстаймвычесть из него 60 60 24 3 вставить в селект пол, ss (??), 08:58 , 31-Мрт-17 (15) –2
> Вопрос в другом, данные нужно выводить за последние 3 дней вот тут > В общем я в логическом тупике, прошу помощи :) взять текущее время в юникстайм вычесть из него (60*60*24*3) вставить в селект получившееся число. это в большинстве случаев - вся что вам надо знать о вычислении разницы в датах. в зависимости от настройки базы или сессии - вы можете использовать разный формат даты. но из вашего скрипта мне вообще говоря не видно где у вас там колонка с датой? то есть таймстамп то у вас в базе есть у строк? если таймтамп пишеться как дата- то там и так юникстайм по умолчанию... если текстовое поле- хреновый у вас был программист. ну тогда просто добавляется одна строка по преобразованию формата даты к юникстайму и далее все как описано выше...
- вычесть можно 30 дней,можно больше, можно меньшенужно делать выборку сразу за ве, михалыч (ok), 07:40 , 06-Апр-17 (19)
> Вопрос в другом, данные нужно выводить за последние 3 дней вот тут > у меня сложности и возникли, сначала хотел из сегодняшней даты вычитать > 30 и потом прибавлять по одному, но получается что я смогу > вычесть только до 1 числа месяца и более того не во > всех месяцах 30 дней.вычесть можно 30 дней,можно больше, можно меньше > В общем я в логическом тупике, прошу помощи :) > Каким образом вывести данные на страницу за последние 30 дней, как правильно > сделать выборку из БД чтобы не делать отдельный запрос для каждого > дня. нужно делать выборку сразу за весь требуемый период, то есть за 30 дней, текущий месяц, предыдущий месяц или любой требуемый период времени > В идеале еще нужно сделать ссылки на данные за последние месяцы, но > думаю с этим я разберусь когда буду понимать логику вычитания дат. там ничего сложного, когда поймешь )) > Заранее огромное спасибо. > PS в перле я очень слаб поэтому по возможности прошу давать развернутые > ответы с кусками кода. видимо возникла сложность с передачей временных параметров с/на страницу отчета и в базу данных?
- Вот в этом и проблема я не понимаю как помещать данные полученные из БД в нужные, HattabbI4 (ok), 11:57 , 06-Апр-17 (20)
> видимо возникла сложность с передачей временных > параметров с/на страницу отчета и в базу данных?Вот в этом и проблема я не понимаю как помещать данные полученные из БД в нужные мне ячейки в таблице. Как видно на примере я смог высчитать статистику за весь период, в принципе изменив запрос я могу сделать статистику за любой период, но сделать за последние n дней не понятно. Жесть как же сложно объяснить. Как написать запрос вполне понятно, не понятно куда положить результаты запроса для вычислений и как потом результаты вычислений положить в нужные ячейки html таблицы, то есть под правильную дату. При этом чтоб она каждый день смещалась на день вперед. Возможно я вообще все не правильно начал делать, я почти уверен что все не так. Поэтому я и написал на форумах, однако в ответ получил только критику и ссылки на мануалы которые уже читал.
- Я понялэто делается в цикледа, ты начал делать не совсем правильно,я подскажу чу, михалыч (ok), 19:57 , 06-Апр-17 (22)
>> видимо возникла сложность с передачей временных >> параметров с/на страницу отчета и в базу данных? > Вот в этом и проблема я не понимаю как помещать данные полученные > из БД в нужные мне ячейки в таблице. > Как видно на примере я смог высчитать статистику за весь период, в > принципе изменив запрос я могу сделать статистику за любой период, но > сделать за последние n дней не понятно. > Жесть как же сложно объяснить.Я понял > Как написать запрос вполне понятно, не понятно куда положить результаты запроса для > вычислений и как потом результаты вычислений положить в нужные ячейки html > таблицы, то есть под правильную дату. При этом чтоб она каждый > день смещалась на день вперед. это делается в цикле > Возможно я вообще все не правильно начал делать, я почти уверен что > все не так. Поэтому я и написал на форумах, однако в > ответ получил только критику и ссылки на мануалы которые уже читал. да, ты начал делать не совсем правильно, я подскажу чуть позже, бывает легче показать на примере, чем объяснять
- так оно, жду , HattabbI4 (ok), 09:12 , 08-Апр-17 (23) –1
> я подскажу чуть позже, бывает легче показать на примере, чем объяснять так оно, жду.
- я сожалею, но моё обещание с примером затянулосьвыдался вечерок свободного време, михалыч (ok), 05:48 , 12-Апр-17 (28)
>> я подскажу чуть позже, бывает легче показать на примере, чем объяснять > так оно, жду.я сожалею, но моё обещание с примером затянулось выдался вечерок свободного времени, набросал вариант выборки из БД но затем, вижу, что на приведённом примере https://docs.google.com/spreadsheets/d/1Dtby-VeUnt8Wg_WEYqeD... отчёт строится горизонтально, а у меня вертикально )) пришлось переписать свой пример с максимально приближённому варианту БД из https://drive.google.com/file/d/0Byy2RDccuWnTdmQ5TXlSVm1iNkV... и как всегда, возникают другие важные и неотложные дела, которые не могут подождать и которые ну ни как нельзя отодвинуть написал весь скрипт полностью, захотелось проверить, что получилось )) поскольку БД с asterisk под рукой нет, пришлось создать и затем набить эту БД какими-то левыми значениями, мусором одним словом ну не буду же я вносить сотню-другую строк вручную, пришлось написать для этого другой скрипт )) захотелось сделать проверку входных данных, ну чтобы пользователь не мог передать некорректные значения в переменные, мусор всякий (SQL-инъекции и всё такое прочее )) дописал скрипт потом подумал, что возможно в моих скриптах не всё будет сходу понятно и вызовет в свою очередь дополнительные вопросы, что, откуда и куда пришлось прокомментировать, максимально )) в результате, скрипт растянулся до неприличных размеров нет, ну если выкинуть проверки и порезать комменты, то в сухом остатке останется немного короче, куда cкинуть, если ещё нужно ?
- Спасибо большое ivanovroman russia gmail com сюда можно либо залейте куда нибуд, HattabbI4 (ok), 13:45 , 12-Апр-17 (29)
> короче, куда cкинуть, если ещё нужно ? Спасибо большое! ivanovroman.russia@gmail.com сюда можно либо залейте куда нибудь я скачаю
- ушло, возможно упало в спам кодировка koi8-r, михалыч (ok), 17:24 , 12-Апр-17 (30)
ушло, возможно упало в спам )) кодировка koi8-r
- ну вот зачем ты подаешь нищим https vk com hattabbi4особенно учитывая это Ром, Pahanivo (ok), 09:15 , 14-Апр-17 (31)
> ушло, возможно упало в спам )) > кодировка koi8-r ну вот зачем ты подаешь нищим? https://vk.com/hattabbi4 особенно учитывая это: "Роман Иванов запись закреплена 28 мар 2015 Действия Ремонт компьютеров, ноутбуков. - чистка - настройка - удаление вирусов - удаление рекламы из браузеров - удаление всплывающих окон при запуске - ускорение работы - установка ПО Качественно, не дорого, в короткие сроки. " доперло? а?
- У вас такой характер мерзкий, я сочувствую вам и вашему окружению Всего хорошег, HattabbI4 (ok), 10:47 , 14-Апр-17 (33)
> доперло? а?У вас такой характер мерзкий, я сочувствую вам и вашему окружению. Всего хорошего.
- Pahanivo, ты, конечно, айтишник авторитетный, но зачем ты так унижая других - , михалыч (ok), 18:48 , 14-Апр-17 (38)
Pahanivo, ты, конечно, айтишник авторитетный, но зачем ты так ??> чукча не читатель? > искренне раздражают попрошайки у церкви дышащие перегаром ... > ну вот зачем ты подаешь нищим? унижая других - сам не возвысишься ну о чём вообще сыр-бор? ну возник вопрос, ну спросил человек на форуме помощи, и что? его не сразу поняли, пытались помочь, когда поняли лучше, многим стало лениво и скучно разжёвывать очевидные для них прописные истины а мне было немного интересно, и я решил подсказать, просто помочь, людям вообще свойственно делиться знаниями и опытом в stackoverflow вопросы бывают и простые и наивные, бывают и примитивные и ничего, на них, как ни странно, тоже отвечают, терпеливо и с пониманием, никто ещё не родился крутым всезнайкой в open source выкладывают такие крутые разработки, как говорится, без регистрации и смс а тут.. несколько строк кода, скрипт, да если кому-то будет полезен - да на здоровье, если ещё кому-то пригодится - вообще замечательно, может для себя что-то в прок отметят пусть используют как угодно и где угодно зарабатывают? ну и что? это ИХ дело, не моё, зачем считать чужие деньги
- лень читать доки и неумение понимать элементарные вещи читай основы не являетс, Pahanivo (ok), 21:13 , 14-Апр-17 (40)
> ну возник вопрос, ну спросил человек на форуме помощи, и что?лень читать доки и неумение понимать элементарные вещи (читай основы) не является технической проблемой ну сразу же видно когда человек делает, натыкаясь на проблемы, и когда просит сделать за него его работу ...
- подъе ал, негодяй , Pahanivo (ok), 21:14 , 14-Апр-17 (41)
> Pahanivo, ты, конечно, айтишник авторитетныйподъе*ал, негодяй :)
- Огромное спасибо, особенно за второй скрипт, вы показали как делать все, и даже , HattabbI4 (ok), 10:44 , 14-Апр-17 (32)
> ушло, возможно упало в спам )) > кодировка koi8-r Огромное спасибо, особенно за второй скрипт, вы показали как делать все, и даже больше. Я очень вам благодарен.
- ну хватит ему уже подавать - товарищ вообще извилины ни разу не напряг , Pahanivo (ok), 12:54 , 08-Апр-17 (25)
ну хватит ему уже подавать - товарищ вообще извилины ни разу не напряг.
- Вам не с кем пообщаться , HattabbI4 (ok), 18:45 , 08-Апр-17 (26)
> ну хватит ему уже подавать - товарищ вообще извилины ни разу не > напряг.Вам не с кем пообщаться?
|