![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 26.01.2023
Сообщений: 4
|
![]()
Уважаемые знатоки SQL!
Имею следующий сложный SQL-запрос: $sql= "SELECT src,dst,lastapp,substring(channel,1 ,locate("-",channel,1)-1) AS chan1, "; $sql.="substring(dstchannel,1,locat e("-",dstchannel,1)-1) AS chan2, "; $sql.="billsec, calldate,j1.dial,j2.dial,if(j1.dial is not null and j2.dial is null,'outbound','') as outbound, "; $sql.="if(j1.dial is null and j2.dial is not null,'inbound','') AS inbound, "; $sql.="if(j1.dial is not null and j2.dial is not null,'internal','') as internal "; $sql.="FROM asteriskcdrdb.cdr LEFT JOIN asterisk.devices as j2 on substring(dstchannel,1,locate("-",dstchannel,1)-1) = j2.dial "; $sql.="LEFT JOIN asterisk.devices as j1 on substring(channel,1,locate("-",channel,1)-1) = j1.dial WHERE calldate>curdate() AND billsec>0 AND disposition='ANSWERED' "; $sql.="HAVING (outbound<>'' OR inbound<>'' OR internal<>'') AND chan2<>'' ORDER BY calldate DESC"; Задачка у меня следующая: В столбце asterisk.devices.dial по умолчанию находится запись вида "SIP/XXX", а в моем случае, она может быть как дефолтного вида, так и такой: "SIP/XXX&SIP/trunk/XXX". Сейчас имеющийся запрос надо изменить таким образом, чтобы в запросе осуществлялась проверка на наличие в записи этого столбца символа "&", в случае наличия, из asterisk.devices.dial нужно выбирать не всю запись целиком, а только подстроку от начала и ДО символа & Пробую j1.dial и j2.dial менять на следующие конструкции соответственно: substring(j1.dial,1,if(locate("&",j 1.dial,1)>0, locate("&",j1.dial,1)-1, lenght(j1.dial))) substring(j2.dial,1,if(locate("&",j 2.dial,1)>0, locate("&",j2.dial,1)-1, lenght(j2.dial))) В приведенных мною конструкциях я пытаюсь брать подстроку из записи dial, задавая в качестве длины подстроки, в зависимости от выполнения проверки наличия символа &, либо длину подстроки ДО символа &, либо ВСЮ длину записи... Запрос запускается из скрипта на PHP, поэтому двойные кавычки в запросе экранируются обратным слэшем... Но здесь обратный слэш убирается при сохранении сообщения ![]() MySQL выдает ошибку синтаксиса, в которой ругается на отсутствие функции asterisk.lenght Голова пухнет - что-то делаю не так ![]() Может кто-то из знатоков подтолкнуть меня в нужном направлении - кудыть рыть? ![]() Последний раз редактировалось NExTreem; 26.01.2023 в 11:04. |
![]() |
![]() |
![]() |
#2 | |
Форумчанин
Регистрация: 27.04.2022
Сообщений: 403
|
![]()
запрос кровь из глаз...
Цитата:
Зачем говорить об ошибке на пальцах, если можно скопировать текст ошибки?
стимулятор https://yoomoney.ru/to/41001303250491
|
|
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 26.01.2023
Сообщений: 4
|
![]() Цитата:
sql=SELECT src,dst,lastapp,substring(channel,1 ,locate("-",channel,1)-1) AS chan1, substring(dstchannel,1,locate("-",dstchannel,1)-1) AS chan2, billsec, calldate, substring(j1.dial,1,if(locate("&",j 1.dial,1)>0, locate("&",j1.dial,1)-1, lenght(j1.dial))), substring(j2.dial,1,if(locate("&",j 2.dial,1)>0, locate("&",j2.dial,1)-1,lenght(j2.dial))) ,if(j1.dial is not null and j2.dial is null,'outbound','') as outbound, if(j1.dial is null and j2.dial is not null,'inbound','') AS inbound, if(j1.dial is not null and j2.dial is not null,'internal','') as internal FROM asteriskcdrdb.cdr LEFT JOIN asterisk.devices as j2 on substring(dstchannel,1,locate("-",dstchannel,1)-1)=substring(j2.dial,1,if(locate("& ",j2.dial,1)>0,locate("&",j2.dial,1 )-1,lenght(j2.dial))) LEFT JOIN asterisk.devices as j1 on substring(channel,1,locate("-",channel,1)-1)=substring(j1.dial,1,if(locate("& ",j1.dial,1)>0,locate("&",j1.dial,1 )-1,lenght(j1.dial))) WHERE calldate>curdate() AND billsec>0 AND disposition='ANSWERED' HAVING (outbound<>'' OR inbound<>'' OR internal<>'') AND chan2<>'' ORDER BY calldate DESC SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION asterisk.lenght does not exist Последний раз редактировалось NExTreem; 26.01.2023 в 16:48. |
|
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 26.01.2023
Сообщений: 4
|
![]() |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 26.01.2023
Сообщений: 4
|
![]()
Ошибка у меня орфографическая, правильно пишется length. Я последние буквы поменял местами.
![]() Вот что значит - глаз замылился уже ![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сложный запрос SQL | irina1410 | БД в Delphi | 4 | 03.07.2012 16:46 |
Сложный запрос | templton | Microsoft Office Access | 8 | 21.04.2011 13:43 |
Сложный запрос в SQL | A-Lex-Is | SQL, базы данных | 1 | 10.08.2010 23:19 |
Сложный запрос | Lianchik | Помощь студентам | 1 | 01.03.2010 17:16 |
сложный sql запрос | kate158 | БД в Delphi | 0 | 18.09.2008 11:38 |