The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите с запросом"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Помогите с запросом"  
Сообщение от Jaivan (??) on 05-Мрт-09, 17:14 
Здравствуйте!
Пишу скрипт для работы с базой данных, озадачен вопросом, как можно в констукции
...
WHERE CAST(field1 AS CHAR) LIKE CONCAT(CAST(field2 AS CHAR), '%')
...

реализовать выборку по наибольшему совпадению начальных символов поля field1 из множества строк, получающихся из конструкции CONCAT(CAST(field2 AS CHAR), '%')

пример, для понимания:
есть 3 направления

1 страна1
12 страна2
123 страна3

при звонке на номер 123ххххххх тарификация должна осуществляться по стране3

Помогите реализовать такую штуку )

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите с запросом"  
Сообщение от other (ok) on 05-Мрт-09, 23:21 

mysql> select * from test;
+----+--------+
| id | prefix |
+----+--------+
|  1 | 1      |
|  2 | 12     |
|  3 | 123    |
|  4 | 1234   |
|  5 | 12345  |
+----+--------+
5 rows in set (0.00 sec)

mysql> select * from test where left('1288977324324212', length(prefix)) = prefix order by prefix desc limit 1;
+----+--------+
| id | prefix |
+----+--------+
|  2 | 12     |
+----+--------+
1 row in set (0.00 sec)

mysql> select * from test where left('12388977324324212', length(prefix)) = prefix order by prefix desc limit 1;
+----+--------+
| id | prefix |
+----+--------+
|  3 | 123    |
+----+--------+
1 row in set (0.00 sec)

mysql> select * from test where left('123488977324324212', length(prefix)) = prefix order by prefix desc limit 1;
+----+--------+
| id | prefix |
+----+--------+
|  4 | 1234   |
+----+--------+
1 row in set (0.00 sec)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Помогите с запросом"  
Сообщение от Jaivan (??) on 06-Мрт-09, 10:10 
>[оверквотинг удален]
>1 row in set (0.00 sec)
>
>mysql> select * from test where left('123488977324324212', length(prefix)) = prefix order by prefix desc limit 1;
>+----+--------+
>| id | prefix |
>+----+--------+
>|  4 | 1234   |
>+----+--------+
>1 row in set (0.00 sec)
>

выборка идентичная получается что так:
WHERE CAST(field1 AS CHAR) LIKE CONCAT(CAST(field2 AS CHAR), '%')
что так:
WHERE LEFT(tel1, length(countryid)) = countryid
вторая конечно проще для восприятия, но не делает то, что надо

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Помогите с запросом"  
Сообщение от other (ok) on 06-Мрт-09, 10:20 
вся фишка тут в order by prefix desc limit 1


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Помогите с запросом"  
Сообщение от Jaivan (??) on 11-Мрт-09, 14:46 
>вся фишка тут в order by prefix desc limit 1

мне эта фишка совсем не нужна как бы )))
вот, что надо:
SELECT           c.dt,
                 c.klient,
                 c.tel1,
                 b.country,
                 b.countryid,
                 b.costout,
                 ROUND(c.dur, 0)  AS dur,
                 ROUND((c.dur/60*b.costout), 5) AS Summa
          FROM
                   bil b
                   INNER JOIN cdr c ON c.tel1 LIKE CONCAT(b.countryid, '%')
                   LEFT JOIN bil bi ON
                           bi.countryid != b.countryid
                           AND LENGTH(bi.countryid) > LENGTH(b.countryid)
                           AND c.tel1 LIKE CONCAT(bi.countryid, '%')
          WHERE bi.countryid IS NULL
          ORDER BY c.dt

только еще сделать итоги по ROUND(c.dur, 0)  AS dur и ROUND((c.dur/60*b.costout), 5) AS Summa
не подскажете как?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру