Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Таблица с ip


Автор: Muerto 22.5.2010, 14:20
Хотел создать список Ip которые посещяют сайт...
Но почему то идут дубли!!!
Вот как выглядит таблица:
Код

INSERT INTO `rvisits` (`id`, `ip`) VALUES
(4, '109.105.175.203'),
(63, '109.111.28.57'),
(53, '117.22.116.189'),
(58, '117.22.116.189'),
(65, '178.122.228.97'),
(20, '178.125.2.150'),
(26, '178.125.2.150'),
(17, '178.44.168.161'),
(10, '178.95.31.40'),
(14, '178.95.31.40'),
(5, '207.46.13.46'),
(13, '213.0.112.49'),
(21, '213.0.112.49'),
(42, '62.181.59.31, 188.120.228.146'),
(38, '77.73.88.5'),
(41, '77.74.67.8'),
(56, '77.74.67.8'),
(30, '77.88.29.248'),
(52, '77.88.29.248'),
(47, '78.138.168.112'),
(39, '78.153.158.17'),
(8, '78.36.121.2'),
(16, '78.36.121.2'),
(54, '79.140.10.127'),
(64, '79.140.10.127'),
(1, '79.176.29.180'),
(28, '80.254.110.8'),
(49, '81.17.145.158, 188.120.228.146'),
(46, '85.26.165.157'),
(51, '85.26.165.157'),
(36, '85.26.186.124'),
(44, '85.26.186.124'),
(32, '89.251.107.44'),
(27, '90.189.221.236'),
(37, '90.189.221.236'),
(40, '90.189.221.236'),
(45, '90.189.221.236'),
(35, '92.112.165.9'),
(24, '92.126.103.38'),
(15, '92.127.4.52'),
(25, '92.127.4.52'),
(22, '92.243.181.104'),
(7, '93.113.112.109'),
(57, '93.73.101.72'),
(62, '93.73.101.72'),
(9, '94.137.60.206'),
(12, '94.137.60.206'),
(19, '94.137.60.206'),
(59, '94.137.60.206'),
(11, '94.31.153.86'),
(18, '94.31.153.86'),
(29, '95.153.83.165'),
(31, '95.153.83.165'),
(33, '95.153.83.165'),
(34, '95.153.83.165'),
(48, '95.153.83.165'),
(50, '95.153.83.165'),
(55, '95.153.83.165'),
(2, '95.172.115.91'),
(23, '95.172.115.91'),
(43, '95.181.8.196'),
(61, '95.188.145.69'),
(6, '95.52.196.140'),
(60, '95.52.196.140'),
(3, '95.59.192.95');



Проверка идет такая:
Код

WHERE ((ip LIKE '%".$userip."%') or (ip='".$userip."')) LIMIT 1

И типа если записей <1 то вставляю в rvisits...
Но как вы видите к примеру
(33, '95.153.83.165'),
(34, '95.153.83.165'),
(48, '95.153.83.165'),
(50, '95.153.83.165'),
(55, '95.153.83.165'),

Что я делаю не так?
Таблица в innoDB

Автор: ksnk 22.5.2010, 14:25
http://php.net/ip2long и делай индексным уникаьльным полем...

Добавлено через 2 минуты и 51 секунду
если хочется хранить несколько IP для одного ID - сделай ключ из 2-х полей.

Добавлено через 4 минуты и 26 секунд
а по сути ошибки - сдедлай LIMIT 2 

Автор: Muerto 22.5.2010, 14:36
Понимайте в чем беда... Я вот просто думаю платить за переход по рефке, как часть партнерской программы
НО если вставляется по 4 раза один и тот же Ip , значит и партнер получит оплату 4 раза , что разумеется очень плохо мне.

И чем плох LIMIT 1 ?

Вроде бы если нашел Ip то нафиг дальше искать, зачем ещё нужны?

А id мне не нужен, ибо список ip глобальный...

Добавлено через 13 минут и 37 секунд
И чем лучше или хуже 
Код

INET_ATON()

Автор: Muerto 22.5.2010, 14:58
Опа, у меня была ошибка в коде, поэтому вставляло без проверки уникальности...
Но все же раз подняли тему...

Какой самый быстрый метод ловли уникальных Ip , что бы поменьше грузило базу?

Я смотрю в сторону может куки, типа вставил, и тогда проверку будет пропускать...

Автор: Serkys 22.5.2010, 16:04
Самый простой вариант - сделать поле IP unique.

Автор: SickFxck 22.5.2010, 16:53
Хранить IP надо в INT.

Автор: Serkys 22.5.2010, 19:43
SickFxck, как это возможно?

Автор: SickFxck 22.5.2010, 20:29
Serkys, INET_ATON()

Автор: Muerto 22.5.2010, 21:47
Я вот не очень понял как этим Anton пользоваться =-)

Автор: NewDima 23.5.2010, 16:50
Muerto, вам ksnk сразу дал правильное решение
Цитата

ip2long и делай индексным уникаьльным полем...

Перейдите уж по ссылке выше, эта функция и переводит в инт. А дальше в записи одно поле всего будет - ip (INT), как  PRIMARY KEY

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)