Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Хелп по мускулу
Новая тема
Ответить
цитата
26/08/10 в 03:47
mxn
То ли я не понимаю как работает sum, то ли какие-то баги мускуля
Идет первый запрос, количество кликов за текущие сутки:
>> SELECT sum(user_clicks) FROM users WHERE user_when > 1282712400
Возвращает 29516 (совершенно не риал - за все время у меня 70к)
Идет второй запрос, кол-во кликов за предыдущие сутки:
>> SELECT sum(user_clicks) FROM users WHERE user_when > 1282626000 && user_when < 1282712400
Возвращает 2469 (уже более реальные цифры)
В чем ллять разница?? вообще не могу въехать..
цитата
26/08/10 в 11:37
nicb1977
ну судя по SQL разница в уловиях WHERE... а наасчет багов MySQL это вряд ли. А что за поле user_when? я так понял количество секунду? А что не просто дата?
цитата
26/08/10 в 12:17
leroy_17
group by выставлять надо по правильным параметрам
цитата
26/08/10 в 12:52
mxn
user_when - время, когда юзвер зашел на сайт, в юниксовом формате. Почему не таймштамп - сам уже не помню, но в таком виде был какой-то сакральный смысл.
Вот в том то и дело что когда пытаемся подсчитать за текущие сутки через WHERE user_when > 1282712400 вываливается полная херь(
цитата
26/08/10 в 13:42
mxn
leroy_17 писал:
group by выставлять надо по правильным параметрам
о, сейчас затестимс!
цитата
26/08/10 в 14:01
Heavy
group by имхо не нужен.
какая размерность поля хранящего время - INT -сколько = 9-10-11 ?
или на всякий случай посмотрите - нету ли в таблице невалидных данных - какой-то один счетчик зашкалил или есть записи на "год вперед".
цитата
26/08/10 в 14:21
mxn
Heavy писал:
group by имхо не нужен.
какая размерность поля хранящего время - INT -сколько = 9-10-11 ?
user_when int(15)
Heavy писал:
или на всякий случай посмотрите - нету ли в таблице невалидных данных - какой-то один счетчик зашкалил или есть записи на "год вперед".
Глянул - все ок вроде. От 1279062533 до 1282821657.
цитата
26/08/10 в 14:26
mxn
Засунул груп. Уже с час весит 115 кликов, хотя гдет с 300 человек зашло (по крайней мере кликов 50-100 должно было набежать точно). Подозреваю что нужны еще какие-то параметры
:
>> SELECT sum(user_clicks) FROM users WHERE user_when > " . $today . " GROUP BY user_id"
цитата
26/08/10 в 14:41
Dr.Syshalt
Что-то не совсем понятно, что там в таблице вообще лежит - что в поле user_click и откуда оно берется? Я правильно понимаю, что там количество кликов от данного юзера, а user_when обновляется каждый раз, когда этот юзер кликает? Что это за юзеры, как ты определяешь, что именно за юзер кликнул? А так пока все "на деревню дедушке"
цитата
26/08/10 в 15:21
mxn
Такс, в таблице есть:
user_id - автоинкримент, индекс, первичный
user_infohash - md5, в него уходит инфа о юзвере (айпи, агент и еще что-то там) - по нему определяю уникальность юзверя
user_referer - откуда пришел
user_clicks - количество кликов юзверя, ++ при каждом клике.
user_when - время когда пришел пользователь (в юниксовом формате) пишется один раз
цитата
26/08/10 в 17:03
Dr.Syshalt
Ну а чего "такс"? Запрос выглядит совершенно нормальным, а вот гарантий, что ему скармливают валидные данные - нету никаких. Если ты на самом деле создаешь запись в первый раз, как юзер к тебе пришел - то ты в данной ситуации делаешь выборку не хитов за день, а сколько у тебя за тот день новоприбывших - старых юзеров, которые к тебе вернулись, ты уже не увидишь в селекте. Если же ты все-таки обновляешь user_when - то вылезать будет сумма всех хитов, за все время - от тех юзеров, которые один клик хотя бы за данный период выдали. Ну и за кадром остаются вопросы багов в коде, который уникальность юзера определяет, хэш создает. И еще мало ли что там за кулисами. Прежде чем предположить баги в MySQL, логично все-таки предположить сначала баг в своем коде.
По-хорошему тут 2 таблицы должно быть - в одной юзера, в другой - raw hits от них, с таймстемпом каждого и увязкой с таблицей юзеров через primary id таковой (веришь, нет - и работать будет быстрее). А так как сделано - это через жопу, и дальнейшие баги меня совершенно не удивили бы. К примеру, NULL values в колонке user_when
цитата
26/08/10 в 18:08
leroy_17
ты бы сначала структуру выложил таблы
user_infohash - может лучше рассмотреть вариант с простановкой куков ? в большинстве случаев это будет лучше для подсчета юзеров, например если какой то трейд трафа.
Dr.Syshalt +1
цитата
27/08/10 в 10:21
nicb1977
leroy_17 писал:
group by выставлять надо по правильным параметрам
Нафига нужен group by? Это параметр нужен тольео если нуджно отгрупировать по полю. Проблема тут в том, что не верно выставлены условя в WHERE, вот и все. Как сделать их верными - это надо смотреть на данные в таблице.
цитата
27/08/10 в 13:53
leroy_17
проблема тут в архитектуре таблицы.
про group by сказал до того как увидел структуру
Новая тема
Ответить
Эта страница в полной версии