Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сделать запрос
|
|||
|---|---|---|---|
|
#18+
привет всем, есть некая таблица, в которой каждая запись имеет колонку с клиентским ID и его IP адресом: ID | NAME | IP 1 | QWER | 1.1.1.1 2 | ASDF | 2.1.2.2 1 | QWER | 1.2.3.3 4 | HJKL | 123.2.1.1 1 | QWER | 3.4.21.1 Kаждый клиент может иметь несколько IP адресов, и поэтому если я делаю выборку по ID клиента, я получаю результат в виде таблицы с несколькими строками. ID | NAME | IP 1 | QWER | 1.1.1.1 1 | QWER | 1.2.3.3 1 | QWER | 3.4.21.1 Мне нужно сделать запрос где IP адрес идёт в качестве ключевого аргумента и по нему определяется клиентский ID: Скажем SELECT * FROM test WHERE IP=(ip1 OR ip2 OR ip3) Подскажите пожалуйста как такое сделать. Саму структуру таблицы поменять не могу - не мной написано, а вот запрос сделать очень надо... С уважением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2004, 20:55 |
|
||
|
Как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Что значит в качестве ключевого аргумента? У тебя есть набор айпишников и тебе для каждого надо вычислить клиента или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2004, 12:24 |
|
||
|
Как сделать запрос
|
|||
|---|---|---|---|
|
#18+
SELECT * FROM test WHERE IP='1.1.1.1' OR IP='2.2.2.2' OR IP='3.3.3.3' угадал? ну народ пошел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2004, 20:25 |
|
||
|
Как сделать запрос
|
|||
|---|---|---|---|
|
#18+
Leningrad. Ну тут совсем не правда про народ... Я наверное не так описал всё... Есть таблица в описанием клиента, где указывается его логин, пароль и IP адрес- один IP на запись. Если клиент имеет более одного IP, то приходится писать две, три и более записей(строчек). В другой таблице ведутся учетные записи где эти IP указываются. Мне нужно сделать выборку по этим учетным записям. и вытащить все записи по клиенту. Если один IP адрес - все просто, а если их несколько? Как мне сделать запрос (одной строчкой) чтобы выбрать эти IP адреса в одной строке а не один IP на строчку. Это примерный запрос который я обрабатываю: SELECT c.stationip, c.tariffdesc, c.stationid, c.setuptime, c.connecttime, c.disconnecttime, c.duration, c.terminatecause, e.desc_short, e.desc_long, e.dec_code FROM voipcall c, isdn_error_codes e WHERE c.stationip=(SELECT framedip FROM voipuser WHERE accountid=$acct LIMIT 1) AND c.terminatecause=e.error_code AND setuptime BETWEEN '2004-01-01 00:00:00' AND '2004-01-02 23:59:59' ORDER BY setuptime DESC Я выделил проблемную строчку - если IP могу записать одной строкой - то выборка пройдёт правильно - сразу по всем IP адресам клиента, а пока поставил LIMIT 1 чтобы хоть первый IP адрес вытащить. Иначе вместо одной строки будет много - почислу IP адресов... Надеюсь так понятнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 17:53 |
|
||
|
Как сделать запрос
|
|||
|---|---|---|---|
|
#18+
смотри агрегаты. функция сшивки строк была даже тут. (используй поиск) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 18:12 |
|
||
|
Как сделать запрос
|
|||
|---|---|---|---|
|
#18+
SELECT c.stationip, c.tariffdesc, c.stationid, c.setuptime, c.connecttime, c.disconnecttime, c.duration, c.terminatecause, e.desc_short, e.desc_long, e.dec_code FROM voipcall c, isdn_error_codes e WHERE c.stationip IN (SELECT framedip FROM voipuser WHERE accountid=$acct LIMIT 1) AND c.terminatecause=e.error_code AND setuptime BETWEEN '2004-01-01 00:00:00' AND '2004-01-02 23:59:59' ORDER BY setuptime DESC а вот так не подойдет (выделено жирно) ? если я правильно понял тебе нужно выбрать все данные по клиенту за период для всех его ИП ... если работает недостаточно быстро - копай exists - хотя по заявлениям PG-team в версиях 7.4 IN работает уже не хуже exists (раньше было все плохо с in - раза в 4-5 медленней) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 21:23 |
|
||
|
Как сделать запрос
|
|||
|---|---|---|---|
|
#18+
"ВСЁ ГЕНИАЛЬНОЕ ПРОСТО!!!" Сделал намного проще и без лишней головной боли! Сейчас... "Копал в саду а нужно было в огороде!" Сделал без дополнительного поиска: SELECT c.stationip, c.tariffdesc, c.stationid, c.setuptime, c.connecttime, c.disconnecttime, c.duration, c.terminatecause, e.desc_short, e.desc_long, e.dec_code FROM voipcall c, isdn_error_codes e, voipuser vu WHERE c.stationip= vu.framedip AND vu.accountid=$acct AND c.terminatecause=e.error_code AND setuptime BETWEEN '2004-01-01 00:00:00' AND '2004-01-02 23:59:59' ORDER BY setuptime DESC. Всем большое спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2004, 03:20 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32665785&tid=2007702]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
126ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 419ms |

| 0 / 0 |
