[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите обьединить таблицы
Renden
Добрый вечер, есть база с подсчетом трафика
таблица TRAF
ip | traffic
192.168.0.1 | 321321
192.168.0.1 | 5435
192.168.0.2 | 43543
192.168.0.1 | 3213
192.168.0.2 | 4353
и тд
ну и я сделал таблицу сопоставления
таблица USERS_TRAF
ip | user
192.168.0.1 | вася
192.168.0.2 | петя
192.168.0.3 | коля

Как обьединить таблицы чтоб при выводе из таблицы TRAF заместо ИП подсовывались значение user из таблицы USERS_TRAF? Я просто плохо понимаю, если я обьединю эти таблцы в одну, у меня просто будет еще 2 лишних столбца в таблице, а вывод как реализовать через WHERE?



Спустя 2 минуты, 57 секунд (18.10.2010 - 15:54) Michael написал(а):
SELECT ut.user, t.traffic
FROM TRAF t
LEFT JOIN USERS_TRAF ut ON t.ip = ut.ip

Спустя 2 минуты, 54 секунды (18.10.2010 - 15:57) Renden написал(а):
Michael
Сейчас попробую, а нельзя ли обьяснить? Мне например непонятно откуда береться символ "t" в строке FROM TRAF t , и зачем он нужен..

Спустя 1 минута, 43 секунды (18.10.2010 - 15:58) arvitaly написал(а):
Вы храните IP адрес в виде строки?

Спустя 3 минуты, 13 секунд (18.10.2010 - 16:02) Renden написал(а):
arvitaly
Ну да, а надо как-то иначе?

Спустя 1 минута, 3 секунды (18.10.2010 - 16:03) Michael написал(а):
t - это просто псевдоним для TRAF.
В sql он так и записывается: TRAF t

Спустя 13 секунд (18.10.2010 - 16:03) arvitaly написал(а):
Да, надо в виде unsigned int http://dev.mysql.com/doc/refman/5.0/en/mis...ction_inet-aton

Спустя 53 секунды (18.10.2010 - 16:04) arvitaly написал(а):
У вас каждому IP адресу сопоставлен юзер?

Спустя 5 минут, 33 секунды (18.10.2010 - 16:09) Renden написал(а):
arvitaly
А есть разница?
У вас каждому IP адресу сопоставлен юзер?

Ну нет, не всех, кто-то допустим с ноутом придет, воткнеться в сетку, у него определица ип, а присвоения естественно не будет, он ведь тока пришел как-бы..
Michael, спасибо, правда попробывать не успеваю, рабочий день кончился.. Удачи:)

Спустя 8 минут, 45 секунд (18.10.2010 - 16:18) arvitaly написал(а):
Цитата
arvitaly
А есть разница?


разница огромная, строка и число, строка намного больше места, ищется намного дольше, сравнивается намного дольше

Спустя 48 минут, 4 секунды (18.10.2010 - 17:06) Renden написал(а):
arvitaly,
Понятно, просто там еще не только ип, часто еще по dns пишеться хост.

Спустя 49 минут, 51 секунда (18.10.2010 - 17:56) arvitaly написал(а):
ну хост тоже можно в ip превратить...

Спустя 15 часов, 27 минут, 43 секунды (19.10.2010 - 09:24) Renden написал(а):
Хм, попробывал, теперь я понял к чему arvitaly спросил:
Цитата
У вас каждому IP адресу сопоставлен юзер?

Поскольку у меня не к каждому ИП сопоставлен юзер, там где нет сопоставления вообще ничего не выводиться, как сделать чтоб если нет сопоставления - выводился просто ИП?

Спустя 3 минуты, 28 секунд (19.10.2010 - 09:27) Michael написал(а):
SELECT IFNULL(ut.user, ut.ip)

Спустя 15 минут, 43 секунды (19.10.2010 - 09:43) Renden написал(а):
Michael
Допер, спасибо.

Спустя 8 минут, 10 секунд (19.10.2010 - 09:51) arvitaly написал(а):
Цитата
У вас каждому IP адресу сопоставлен юзер?


И даже так: у вас каждому IP будет сопоставлен юзер?

Если да, то при обнаружении нового IP сразу его нужно заносить в USERS_TRAF с пустым именем.

И все тогда просто

select sum(traffic), ip from TRAF group by ip


ну можно еще Inner join имя подцепить

Но IP обязательно как число храните, для ускорения индексы не забудьте

Спустя 2 минуты (19.10.2010 - 09:53) Renden написал(а):
Michael
А нет, несовсем, сам mysql то вывел резултьтаты, а как вывести их в пхп то? Какое название $row в таком случае будет?

Спустя 2 минуты, 11 секунд (19.10.2010 - 09:55) Michael написал(а):
SELECT IFNULL(ut.user, ut.ip) AS xyz


$row['xyz']



Спустя 4 минуты, 21 секунда (19.10.2010 - 10:00) Renden написал(а):
Michael
Век живи - век учись, в очередной раз благодарю)

Спустя 29 минут, 13 секунд (19.10.2010 - 10:29) Renden написал(а):
и надеюсь последний вопрос))
можно ли как-то сделать обьединенние по совпадающим именам или ип?
Ну намиример:
Алеша Попович | 100
Марь Ивановна | 500
Алеша Попович | 150

Чтоб выводилось:
Алеша Попович | 250
Марь Ивановна | 500

у меня ща:

SELECT SUM(traffic) AS trafsumm FROM traffic WHERE host LIKE '%Алеша Попович%'

ну естественно я могу заместо LIKE '%Алеша Попович% подсталять переменную полученую $_GET но хотелось бы просматривать всех списком, а не конкретного юзера.

Спустя 7 минут, 17 секунд (19.10.2010 - 10:36) arvitaly написал(а):
я же написал уже

select t.sum_traf,t.ip,user from (select sum(traffic) as sum_traf, ip from TRAF group by ip) t inner join USERS_TRAF on USERS_TRAF.ip=t.ip

Спустя 31 минута, 14 секунд (19.10.2010 - 11:07) Renden написал(а):
arvitaly
Сорри, я просто сначала не понял что Вы имели ввиду. Все получилось, спасибо.
Тока мне придеться всех заносить, чтоб они выводились? Нельзя ли как-то обьединить ваш запрос и запрос Michael-ля, я ща попробую, мб получиться.

Спустя 3 минуты, 28 секунд (19.10.2010 - 11:11) arvitaly написал(а):
Цитата
Сорри, я просто сначала не понял что Вы имели ввиду. Все получилось, спасибо.
Тока мне придеться всех заносить, чтоб они выводились?


Ну в таблице TRAF_USERS должны быть все участвующие IP

Спустя 1 минута, 11 секунд (19.10.2010 - 11:12) Renden написал(а):
arvitaly
Я уже понял, я говорю о том нель-зя ли использовать IFNULL?

Спустя 3 минуты, 27 секунд (19.10.2010 - 11:15) arvitaly написал(а):
Цитата
Я уже понял, я говорю о том нель-зя ли использовать IFNULL?


если не хотите всех заносить то можно

вернее так наверное

select t.sum_traf,t.ip,user from (select sum(traffic) as sum_traf, ip from TRAF group by ip) t left join USERS_TRAF on USERS_TRAF.ip=t.ip

Спустя 2 минуты, 35 секунд (19.10.2010 - 11:18) Michael написал(а):
Кинь сюда последний запрос, который я тебе давал.

Спустя 18 минут, 7 секунд (19.10.2010 - 11:36) Renden написал(а):
Michael
arvitaly
Все, сделал, огромное вам спс.

Спустя 51 минута, 2 секунды (19.10.2010 - 12:27) Renden написал(а):
Чем дальше в лес, тем больше дров..
Очередной вопрос:
SELECT IFNULL(ut.user, ut.ip) AS xyz

Почему нельзя дальше использовать 'xyz' в запросе?
Ну например так:
SELECT IFNULL(ut.user, ut.ip) AS xyz еще параметры WHERE xyz = 'бла-бла'

Как тогда использовать дальше в запросе то что вернул IFNULL?
Да и есть у кого нормальная дока (книга) по mysql?, то что выдает гугл, дрова полные, черт ногу сломит, больше смахивает на камасутру чем на доку..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.