VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Закрывающая скобка в mysql запросе

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
sergio
Сообщения: 58
Зарегистрирован: 09 сен 2014, 12:13

Закрывающая скобка в mysql запросе

Сообщение sergio »

Добрый день.
Задача реализовать обратный дозвон. Направить входящий извне вызов(определяем номер aon), абоненту asterisk, если он набирал его.
Задача решена, но есть проблема. Если абонент asterisk вызывал 7-значный номер ГТС то определитель номера покажет телефонный номер полностью (код_города)ХХХХХХХ и соответственно совпадение при поиске в БД не будет найдено.
Текущей вариант:
exten => s,n,MySQL(Query resultid ${connid} SELECT src FROM cdr WHERE dst='8${aon}' AND calldate > "${now}" - INTERVAL 5 HOUR ORDER BY calldate DESC LIMIT 1;)

Тогда я решил проводить поиск вызываемого номера по правым 7 знакам, вот таким запросом mssql:
mysql> set @num=12345678901
mysql> SELECT src FROM cdr WHERE dst LIKE CONCAT ('%',RIGHT(@num,7)) ORDER BY calldate DESC LIMIT 1;
+------+
| src |
+------+
| 3085 |
+------+
1 row in set (0.00 sec)
Как видно скрип работает в mssql.

Однако при переносе в extension.conf правило не срабатывает:
exten => s,n,MySQL(Query resultid ${connid} SELECT src FROM cdr WHERE dst like CONCAT ('%' , RIGHT(${aon} , 7)) AND calldate > "${now}" - INTERVAL 5 HOUR ORDER BY calldate DESC LIMIT 1;)

Лог:
-- Executing [s@dropme:6] MYSQL("Dongle/mir-01000000ed", "Query resultid 1 SELECT src FROM cdr WHERE dst like CONCAT ('%' , RIGHT(номер_тел , 7)") in new stack
[Sep 9 12:47:49] WARNING[18374]: app_mysql.c:393 aMYSQL_query: aMYSQL_query: mysql_query failed. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Из лога видно что команда обрывается после первой закрывающей скобки. Она воспринимается как скобка закрывающая плавило extension.
Экранизация обратным слэшем(\) не помогает. Как обойти данное ограничение?
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Закрывающая скобка в mysql запросе

Сообщение zzuz »

Экранизация обратным слэшем(\) не помогает.
Не верю.
Линия24 - Системы Массового Телефонного Обслуживания
sergio
Сообщения: 58
Зарегистрирован: 09 сен 2014, 12:13

Re: Закрывающая скобка в mysql запросе

Сообщение sergio »

zzuz

Правило:
exten => s,n,MySQL(Query resultid ${connid} SELECT src FROM cdr WHERE dst like CONCAT ('%' , RIGHT(${aon} , 7\)\) AND calldate > "${now}" - INTERVAL 5 HOUR ORDER BY calldate DESC LIMIT 1;)

Лог:
-- Executing [s@dropme:6] MYSQL("Dongle/mir-0100000104", "Query resultid 1 SELECT src FROM cdr WHERE dst like CONCAT ('%' , RIGHT(номер_тел , 7\)\") in new stack
[Sep 10 08:21:56] WARNING[9108]: app_mysql.c:393 aMYSQL_query: aMYSQL_query: mysql_query failed. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\)\' at line 1
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Закрывающая скобка в mysql запросе

Сообщение virus_net »

Читать до полного понимания: Asterisk cmd MYSQL

P.S.
sergio писал(а):вот таким запросом mssql
sergio писал(а):mysql> set @num=12345678901
Вы уж определитесь MSSQL или MySQL, т.к. это разные БД.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
sergio
Сообщения: 58
Зарегистрирован: 09 сен 2014, 12:13

Re: Закрывающая скобка в mysql запросе

Сообщение sergio »

virus_net писал(а):Вы уж определитесь MSSQL или MySQL, т.к. это разные БД.
Конечно же mysql. Очепятка.
Документацию почитаю. Спасибо.
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Закрывающая скобка в mysql запросе

Сообщение zzuz »

В вашей строке

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

exten => s,n,MySQL(Query resultid ${connid} SELECT src FROM cdr WHERE dst='8${aon}' AND calldate > "${now}" - INTERVAL 5 HOUR ORDER BY calldate DESC LIMIT 1;)
последняя точка c запятой - это комментарий диаплана. Вот этот символ и нужно экранировать . или вообще не писать это символ.

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

exten => s,n,MySQL(Query resultid ${connid} SELECT src FROM cdr WHERE dst='8${aon}' AND calldate > "${now}" - INTERVAL 5 HOUR ORDER BY calldate DESC LIMIT 1)
Линия24 - Системы Массового Телефонного Обслуживания
sergio
Сообщения: 58
Зарегистрирован: 09 сен 2014, 12:13

Re: Закрывающая скобка в mysql запросе

Сообщение sergio »

zzuz
Да все верно, точка с запятой превращает в комментарий то что после. От того и вся проблема. Путаница возникла от того что с этой точкой-запятой без использования скобок внутри все работало.
Спасибо огромное.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH