Я выполняю следующий запрос, чтобы получить статистику для пользователя, на основе которой я им плачу.
SELECT hit_paylevel, sum(hit_uniques) as day_unique_hits
, (sum(hit_uniques)/1000)*hit_paylevel as day_earnings
, hit_date
FROM daily_hits
WHERE hit_user = 'xxx' AND hit_date >= '2011-05-01' AND hit_date < '2011-06-01'
GROUP BY hit_user
Таблица выглядит следующим образом:
CREATE TABLE IF NOT EXISTS `daily_hits` (
`hit_itemid` varchar(255) NOT NULL,
`hit_mainid` int(11) NOT NULL,
`hit_user` int(11) NOT NULL,
`hit_date` date NOT NULL,
`hit_hits` int(11) NOT NULL DEFAULT '0',
`hit_uniques` int(11) NOT NULL,
`hit_embed` int(11) NOT NULL,
`hit_paylevel` int(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`hit_itemid`,`hit_date`),
KEY `hit_user` (`hit_user`),
KEY `hit_mainid` (`hit_mainid`,`hit_date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Проблема в расчете связана с hit_paylevel, который действует как множитель. По умолчанию один, другой вариант 2 или 3, который по сути удваивает или утраивает прибыль за этот день.
Если я повторяю циклы по дням, ежедневная day_earnings
верна, просто, когда я группирую их, она вычисляет все как уровень оплаты 1. Это происходит, если в начале у пользователя был уровень оплаты 1, а позже он был обновлен до более высокий уровень. если пользователь имеет уровень оплаты 2 с самого начала, он также рассчитывает все правильно.