|
|
|
Как лучше сделать запрос
|
|||
|---|---|---|---|
|
#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, 22:02 |
|
||
|
Как лучше сделать запрос
|
|||
|---|---|---|---|
|
#18+
... WHERE IP = 'ip1' or IP = 'ip2' or IP = 'ip3'; или .... WHERE IP IN ('ip1', 'ip2', 'ip3'); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2004, 23:52 |
|
||
|
Как лучше сделать запрос
|
|||
|---|---|---|---|
|
#18+
Я наверное не так описал всё... Есть таблица в описанием клиента, где указывается его логин, пароль и 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:55 |
|
||
|
Как лучше сделать запрос
|
|||
|---|---|---|---|
|
#18+
... Ты чо мне зюзюкаешь, ты рукой махни куда... Из известного анекдота. А по делу мне не совсем понятно, что есть и что нужно. Так что попытаюсь, как понял Есть одна таблица A (ID, NAME, IP). Причем поля ID и NAME не уникальны (!), уникален только IP. Есть еще некая таблица B (IP, X, Y, Z ... ), где присуисвует тот самый IP, я надеюсь Foreign Key, однако. Вроде так. Далее, что нужно? NECTISМне нужно сделать выборку по этим учетным записям. и вытащить все записи по клиенту. Если один IP адрес - все просто, а если их несколько? И в чем проблема Код: plaintext 1. 2. Может я чой-то не понял все еще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 23:28 |
|
||
|
Как лучше сделать запрос
|
|||
|---|---|---|---|
|
#18+
Я понял что он хочет , он хочет чтоб таблица в результатк поменяла структуру , вернее результаты были выданы в структуре отличной от таблицы с которой он выбирает. Что-то типа (user, ip1, ip2, ip3) etc . Теоретически можно, но практически , лучше обработай это в коде программы, не убивайте SQL сервер нетипичными для SQL запросами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2004, 00:42 |
|
||
|
Как лучше сделать запрос
|
|||
|---|---|---|---|
|
#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:22 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32662059&tid=1854865]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 475ms |

| 0 / 0 |
