Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как лучше сделать запрос / 6 сообщений из 6, страница 1 из 1
23.08.2004, 22:02
    #32662059
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
23.08.2004, 23:52
    #32662092
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше сделать запрос
... WHERE IP = 'ip1' or IP = 'ip2' or IP = 'ip3';
или
.... WHERE IP IN ('ip1', 'ip2', 'ip3');
...
Рейтинг: 0 / 0
25.08.2004, 17:55
    #32665494
NECTIS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше сделать запрос
Я наверное не так описал всё...

Есть таблица в описанием клиента, где указывается его логин, пароль и 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
25.08.2004, 23:28
    #32665758
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше сделать запрос
... Ты чо мне зюзюкаешь, ты рукой махни куда...
Из известного анекдота.

А по делу мне не совсем понятно, что есть и что нужно. Так что попытаюсь, как понял

Есть одна таблица A (ID, NAME, IP). Причем поля ID и NAME не уникальны (!), уникален только IP. Есть еще некая таблица B (IP, X, Y, Z ... ), где присуисвует тот самый IP, я надеюсь Foreign Key, однако.

Вроде так. Далее, что нужно?
NECTISМне нужно сделать выборку по этим учетным записям. и вытащить все записи по клиенту. Если один IP адрес - все просто, а если их несколько?

И в чем проблема
Код: plaintext
1.
2.
select DISTINCT ID, NAME from A where IP in 
   (select IP from B where X = 'xxx' and Y = 'yyy' and z = 'zzz' ... );

Может я чой-то не понял все еще?
...
Рейтинг: 0 / 0
26.08.2004, 00:42
    #32665773
Alexey Yakovlev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше сделать запрос
Я понял что он хочет , он хочет чтоб таблица в результатк поменяла структуру , вернее результаты были выданы в структуре отличной от таблицы с которой он выбирает. Что-то типа (user, ip1, ip2, ip3) etc . Теоретически можно, но практически , лучше обработай это в коде программы, не убивайте SQL сервер нетипичными для SQL запросами.
...
Рейтинг: 0 / 0
26.08.2004, 03:22
    #32665786
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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как лучше сделать запрос / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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