powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать запрос
8 сообщений из 8, страница 1 из 1
Как сделать запрос
    #32662038
NECTIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет всем,

есть некая таблица, в которой каждая запись имеет колонку с клиентским 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)

Подскажите пожалуйста как такое сделать.
Саму структуру таблицы поменять не могу - не мной написано, а вот запрос сделать очень надо...

С уважением
...
Рейтинг: 0 / 0
Как сделать запрос
    #32662757
nevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что значит в качестве ключевого аргумента? У тебя есть набор айпишников и тебе для каждого надо вычислить клиента или как?
...
Рейтинг: 0 / 0
Как сделать запрос
    #32663765
Leningrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT * FROM test WHERE IP='1.1.1.1' OR IP='2.2.2.2' OR IP='3.3.3.3'
угадал?
ну народ пошел...
...
Рейтинг: 0 / 0
Как сделать запрос
    #32665487
NECTIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 адресов...

Надеюсь так понятнее...
...
Рейтинг: 0 / 0
Как сделать запрос
    #32665533
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотри агрегаты.
функция сшивки строк была даже тут. (используй поиск)
...
Рейтинг: 0 / 0
Как сделать запрос
    #32665722
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 медленней)
...
Рейтинг: 0 / 0
Как сделать запрос
    #32665785
NECTIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"ВСЁ ГЕНИАЛЬНОЕ ПРОСТО!!!"

Сделал намного проще и без лишней головной боли! Сейчас... "Копал в саду а нужно было в огороде!"

Сделал без дополнительного поиска:

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.

Всем большое спасибо!!!
...
Рейтинг: 0 / 0
Как сделать запрос
    #32666101
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу.
тебе выбирать нескоко строк по связи?
- тады учи джойны, и не пудри мозг.

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


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