Помогите с SQL

Основной форум.
Для опытных

Модераторы: Admins, Модераторы

Ответить
anvista
Сообщения: 54
Зарегистрирован: 21 дек 2009, 15:19

Помогите с SQL

Сообщение anvista » 12 апр 2016, 15:28

Доброго времени суток, уважаемые форумчане.
Помогите, пожалуйста, блондинке с sql-ем.
Хочет начальство оценку работы операторов в колл-центре. Нашла соответствующий топик ( http://asteriskforum.ru/viewtopic.php?p ... 1%8B#75420 ), табличку отдельную создала по образу и подобию cdr (удалив все лишнее).
И все бы хорошо, только не хочет SQL переменные записывать в табличку. Ругается, что синтаксис кривой. Если вместо переменной поставить любую строку в кавычках, то пожалуйста, все в таблицу внесет, а как только переменная, так все.
Это пробный код при выборе циферки

[macro-press-5]
exten => s,1,Set(home=/var/lib/asterisk/sounds/custom)
exten => s,n,MYSQL(Connect connid localhost user pass asteriskcdrdb)
exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO operator (dst,rating) VALUES (${CDR(dst)},5))
exten => 0,n,MYSQL(Disconnect ${connid})
exten => s,n,Playback(${home}/poka)
exten => s,n,Hangup
exten => s,n,MacroExit()

Verbosity is at least 3
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [3222@from-trunk-sip-ses:1] Goto("SIP/avaya-000b7aca", "menu_rating,s,1") in new stack
-- Goto (menu_rating,s,1)
-- Executing [s@menu_rating:1] Set("SIP/avaya-000b7aca", "home=/var/lib/asterisk/sounds/custom") in new stack
-- Executing [s@menu_rating:2] Wait("SIP/avaya-000b7aca", "1") in new stack
-- Executing [s@menu_rating:3] Dial("SIP/avaya-000b7aca", "SIP/3037,,trg") in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/3037
-- SIP/3037-000b7acb is ringing
-- SIP/3037-000b7acb answered SIP/avaya-000b7aca
-- Executing [s@menu_rating:4] BackGround("SIP/avaya-000b7aca", "/var/lib/asterisk/sounds/custom/welcom") in new stack
-- <SIP/avaya-000b7aca> Playing '/var/lib/asterisk/sounds/custom/welcom.slin' (language 'ru')
-- Executing [5@menu_rating:1] Goto("SIP/avaya-000b7aca", "macro-press-5,s,1") in new stack
-- Goto (macro-press-5,s,1)
-- Executing [s@macro-press-5:1] Set("SIP/avaya-000b7aca", "home=/var/lib/asterisk/sounds/custom") in new stack
-- Executing [s@macro-press-5:2] MYSQL("SIP/avaya-000b7aca", "Connect connid localhost user pass asteriskcdrdb") in new stack
-- Executing [s@macro-press-5:3] MYSQL("SIP/avaya-000b7aca", "Query resultid 22 INSERT INTO operator (dst,rating) VALUES (s,5)") in new stack
[Apr 12 17:19:03] WARNING[1740]: app_mysql.c:395 aMYSQL_query: aMYSQL_query: mysql_query failed. Error: Unknown column 's' in 'field list'
[Apr 12 17:19:03] WARNING[1740]: app_mysql.c:395 aMYSQL_query: aMYSQL_query: mysql_query failed. Error: Unknown column 's' in 'field list'
-- Auto fallthrough, channel 'SIP/avaya-000b7aca' status is 'ANSWER'

[macro-press-5]
....
exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO operator (dst,rating) VALUES ('proba',5))
....

-- Executing [s@macro-press-5:3] MYSQL("SIP/avaya-000b7ace", "Query resultid 23 INSERT INTO operator (dst,rating) VALUES ('proba',5)") in new stack
-- Auto fallthrough, channel 'SIP/avaya-000b7ace' status is 'ANSWER'

mysql> select dst,rating from operator WHERE dst='proba';
+-------+--------+
| dst | rating |
+-------+--------+
| proba | 5 |
+-------+--------+
1 row in set (0.00 sec)

понимаю, что руки кривые, но батарея в выправлении не помогает =)

awsswa
Сообщения: 1721
Зарегистрирован: 28 апр 2012, 10:19
Откуда: Russia, Пермь

Сообщение awsswa » 12 апр 2016, 16:58

Внимательно на лог !!!
Query resultid 22 INSERT INTO operator (dst,rating) VALUES (s,5)")

а именно !!! вы внисите два значения s и 5
VALUES (s,5)

а почему не вноситься ? а потому что вы формат полей скорей всего задали - цифровой - а надо было буквенный VARCHAR
тогда даже при ваших кривых руках всё работало

и вы показали только сам сакрос - а не его вызов но и тут понятно
макрос вызывается - макро и аргумент
для вас macro(macro-press-5,${CDR(dst)})

а самом макросе аргумент имеет значение ${ARG1}
для вас - exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO operator (dst,rating) VALUES (${ARG1},5))

смотрите пример - http://asteriskforum.ru/viewtopic.php?t=6716&start=25

PS вообще по уму надо отправлять два значения
и макрос приводить к виду - exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO operator (dst,rating) VALUES (${ARG1},${ARG2}))
платный суппорт по мере возможностей

virus_net
Сообщения: 438
Зарегистрирован: 05 окт 2014, 06:10
Откуда: Москва
Контактная информация:

Сообщение virus_net » 13 апр 2016, 05:55

Синтаксис MySQL:

Код: Выделить всё

INSERT INTO `table` &#40;`field1`,`field2`,`fieldX`&#41; VALUES&#40;'value1','value2','valueX'&#41;;
Названия таблиц и полей обрамляются символом `
Значения (если это не NULL и не функция mysql) обрамляются символом '

Код: Выделить всё

exten => s,n,MYSQL&#40;Query resultid $&#123;connid&#125; INSERT INTO `operator` &#40;`dst`,`rating`&#41; VALUES &#40;'$&#123;CDR&#40;dst&#41;&#125;','5'&#41;&#41; 
P.S.
awsswa писал(а):а потому что вы формат полей скорей всего задали - цифровой - а надо было буквенный VARCHAR
Если бы это было так, то тогда
anvista писал(а):

Код: Выделить всё

mysql> select dst,rating from operator WHERE dst='proba'; 
+-------+--------+ 
| dst | rating | 
+-------+--------+ 
| proba | 5 | 
+-------+--------+ 
1 row in set &#40;0.00 sec&#41;
Не возвращало бы такого результата ;), а значит поле dst там точно не типа INT
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)
- whois сервис: whois.bitname.ru или whois.bitname.bit
- dns сервис: dns1.bitname.ru dns2.bitname.ru
- статистика по доменам
ENUMER - звони бесплатно и напрямую.

anvista
Сообщения: 54
Зарегистрирован: 21 дек 2009, 15:19

Сообщение anvista » 13 апр 2016, 07:02

virus_net, СПАСИБО огромное, помогло =))
Теперь осталось нужные переменные напихать и будет руководству счастье

Ответить