powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помощь с условием
3 сообщений из 3, страница 1 из 1
помощь с условием
    #39035403
Дмитри4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток, никак не получается у меня придумать условие для запроса.
условие должно быть таким к примеру:
есть 3 строки с различными значениями в колонках, надо выбрать только ту строку в которой присутствуют искомые значения и заполнены все поля.
к примеру ищем значения 2 полей isp = 8 , region = 131 , subregion=NULL -> необходимо получить только строку 3(пример во вложении)
пока пытаюсь сделать для одного поля
Код: sql
1.
SELECT * FROM `tariff-data` WHERE CASE WHEN isp IS NOT null THEN FIND_IN_SET(8, isp) ELSE isp is null END


или так выбирает более одной строки(часть запроса):
Код: sql
1.
inner join astcdr.`tariff-data` td on td.tuid=tr.uid and FIND_IN_SET(r.uid, td.region) and (FIND_IN_SET(sr.uid, td.subregion) or td.subregion is null) and (FIND_IN_SET(i.uid, td.isp) or td.isp is null)
...
Рейтинг: 0 / 0
помощь с условием
    #39035615
Дмитри4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл указать что значения полей isp,region,subregion в astcdr.`tariff-data` могут быть разными, например может быть заполнен только region или region,subregion или все 3 поля.
хотелось быть в итоге икать необходимую строку в одном запросе, для полноты картины выкладываю весь запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT b.calldate,b.src, CONCAT(b.prefix, b.number) as dst , b.duration, b.billsec, b.billmin, b.trunk, td.price,  ROUND(CEIL(b.billmin)*td.price, 2) as bill, t.numbertype, i.ispname,sr.subregionname,r.regionname
FROM (SELECT h.calldate ,h.src,SUBSTRING( RIGHT( LPAD( h.dst, 12,  '9' ) , 10 ) , 1, 3 ) AS prefix ,SUBSTRING( RIGHT( LPAD( h.dst, 12,  '9' ) , 10 ) , 4, 7 ) AS number,h.duration,h.billsec , ROUND((CASE h.billsec WHEN 0 THEN 1 ELSE h.billsec END)/60, 2) as billmin,
REGEXP_REPLACE(dstchannel, "(?:SIP|OOH323|LOCAL|SCCP)/(?:FMPR|FMGL)?([a-zA-Z_]+)?.*", '\\1') as trunk
FROM  asteriskcdrdb.cdr h 
WHERE  calldate BETWEEN  '2015-05-01 00:00:00' AND  '2015-05-31 23:59:59' AND LENGTH( h.src ) <=3 AND LENGTH( h.dst ) >3 AND h.disposition='ANSWERED') as b 
inner join astcdr.codes  c on b.prefix=c.abcdef
inner join astcdr.zoneinfo zi on zi.uid=c.zoneinfouid
inner join astcdr.isp i on i.uid=zi.ispuid
inner join astcdr.numtype t on t.uid=c.type
inner join astcdr.region r on r.uid=zi.regionuid
inner join astcdr.subregion sr on sr.uid=zi.subregionuid
inner join astcdr.tariff tr on tr.trunk=b.trunk
inner join astcdr.`tariff-data` td on td.tuid=tr.uid and ........
WHERE  b.number between c.start and c.end and b.trunk='Beeline';
...
Рейтинг: 0 / 0
помощь с условием
    #39036444
Дмитри4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решение нашел в теме Наибольшее количество совпадений OR

Код: sql
1.
SELECT *, (if(FIND_IN_SET('8',isp),1,0)+if(FIND_IN_SET('131',region),1,0)+if(FIND_IN_SET('1844',subregion),1,0)) as matches from `tariff-data` ORDER BY matches DESC LIMIT 1



Не получается добавить его в запрос во втором посте, просьба проконсультировать по данному вопросу
уже всю голову сломал =(
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помощь с условием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]