антиКИЛЛЕР
Well-Known Member
- Регистрация
- 28.07.2011
- Сообщения
- 92
Итак, есть таблица с тремя полями: ref_id, IP и datetime. В первом хранится идентификатор реферала, во втором IP в качестве числа, ну и дата-время в последнем. При этом таблица очень большая, на один день может быть более 100к записей.
Необходимо вести статистику количество хитов и хостов для каждого ref_id за прошедший день. Для этого я создал ещё одну таблицу с полями ref_id, hits, hosts и date, в поле date хранится только день.
На первую таблицу повесил триггер (на BEFORE INSERT):
Проблема кроется в неверном подсчёте количества хостов (в блоке ELSE). Хотя вроде всё логично. Если находим, что такой хост уже был, переменная isHost должна принять значение 0 и при UPDATE значение `hosts` не должно измениться (ибо +0). В случае если такого хоста не было, то в isHost засоввываем единичку.
Проблема в том, что количество хитов, всегда равно количеству хостов, даже если все добавляемые записи будут идеть один IP.
Подозреваю что я очень туплю уже не первый час, но никак не могу понять где.
Просьба вправить мне мозг)
Необходимо вести статистику количество хитов и хостов для каждого ref_id за прошедший день. Для этого я создал ещё одну таблицу с полями ref_id, hits, hosts и date, в поле date хранится только день.
На первую таблицу повесил триггер (на BEFORE INSERT):
Код:
BEGIN
DECLARE referal INTEGER default null;
DECLARE isHost INTEGER default null;
SELECT `ref_id` INTO referal FROM `temp2` a WHERE a.`ref_id`=NEW.`ref_id` and a.`date`=CURDATE();
IF (referal is null) THEN
INSERT INTO `temp2` (`ref_id`,`hits`,`hosts`,`date`) VALUES (NEW.`ref_id`,1,1,CURDATE());
ELSE
SELECT 0 INTO isHost FROM `temp` WHERE `ref_id`=NEW.`ref_id` and `IP`=INET_ATON(NEW.`IP`) and DATE(`datatime`)=CURDATE();
IF (isHost is null) THEN
SELECT 1 INTO isHost FROM dual;
END IF;
UPDATE `temp2` SET `hits`=`hits`+1, `hosts`=`hosts`+isHost WHERE `ref_id`=NEW.`ref_id` and `date`=CURDATE();
END IF;
END
Проблема в том, что количество хитов, всегда равно количеству хостов, даже если все добавляемые записи будут идеть один IP.
Подозреваю что я очень туплю уже не первый час, но никак не могу понять где.
Просьба вправить мне мозг)