3 / 3 / 1
Регистрация: 28.08.2010
Сообщений: 29
|
|
1 | |
История просмотров, PHP + MySQL26.06.2014, 17:24. Показов 2599. Ответов 8
Метки нет (Все метки)
Всем привет. Столкнулся с проблемой статистики просмотров страницы.
Задача вести статистику и выводить ее по указанным параметрам, т.е.: Популярное за день, Популярное за неделю, Популярное за месяц. Так вот думал-думал, додумался что можно хранить статистику просмотров за каждый день по каждой статье, но блин эта таблица будет огромной. Даже если взять что на сайте 1к статей, за месяц будет 30000 записей. Как то мне не нравится этот вариант. Есть идеи как это сделать проще?
0
|
26.06.2014, 17:24 | |
Ответы с готовыми решениями:
8
Счетчик просмотров на PHP & MySQL История болезни пациентов на php mysql Хранить историю просмотров PHP количество просмотров темы форума php |
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
|
|
26.06.2014, 17:44 | 2 |
Почему огромной. Таблица на 1000 строк с 4 столбцами.
`ID_statii`, `date` `Posechenija_za_den`, `Massiv_po_dnjam`, `ID_statii`-тут идентификатор новости `date`-тут дата создания новости `Posechenija_za_den` - тут число скриптом меняется значение на +1 за каждое посещение `Massiv_po_dnjam` - тут данные в формате 1:105, 2:45, 3:206 Раз в день кроном запускается скрипт который обнуляет данные в столбце `Posechenija_za_den`, добавляя в столбец `Massiv_po_dnjam`. Все данные просто парсить и общитывать по формулам.
1
|
3 / 3 / 1
Регистрация: 28.08.2010
Сообщений: 29
|
|
26.06.2014, 21:03 [ТС] | 3 |
BarbosLV, разве так быстрее? по-моему методу будет проще и намного быстрее(это я о обработке запроса) будет хранить по каждому дню.
ид-день-просмотров еще есть варианты?
0
|
8 / 8 / 3
Регистрация: 26.06.2014
Сообщений: 47
|
|
26.06.2014, 21:13 | 4 |
Ну ещё как вариант в БД хранить статистику только за день
А дальше на файлах, но это извращение) в 00:00 запускать скрипт по крону, который будет забирать данные за сегодняшний день и класть в папку, допустим /stats/year/month/day/stat.txt Ещё вариант Так же хранить данные за 1 день, так же крон но не на файлах, а в отдельной таблице total_satats (id, day, weak, month) id - id статьи в каждом поле будет лежать сериализованный массивчкик с данными А вообще MySQL расчитан на большие таблицы и базы, это нормально хранить там огромные массивы информации, так что я бы не пугался больших таблиц
0
|
3 / 3 / 1
Регистрация: 28.08.2010
Сообщений: 29
|
|
26.06.2014, 21:19 [ТС] | 5 |
total_satats (id, day, weak, month)
вся проблема в том что: поле weak это инфа за 7 дней прошло 7 дней мне как то надо узнать сколько было просмотров за первый день, отнять его и добавить показания 8-го дня. так что не подойдет. файлики изврат еще тот) по методу BarbosLV еще могу сказать что будет очень трудно. Примерно взять на сайте 10к инффы. надов ывести 10 популярны за месяц. Берем делаем запрос к стате вытаскиваем 10к записей азпаршиваем загоняем в масив. сортируем а дальше уже достаем запись. тоже помоему изврат Еще 1 вариант придумал 1 таблица содержит поля: ид сегодня неделя месяц. вторая ид день количество. ограничить на 30 записей на один ид тогда сможем использовать метод который педложил FMRed.
0
|
8 / 8 / 3
Регистрация: 26.06.2014
Сообщений: 47
|
|
26.06.2014, 21:25 | 6 |
Да не вопрос)
В полях неделя и месяц будут храниться массивы, а не суммарные данные, то есть 7 массивов в week, 30 массивов в month а при добавлении нового дня - первый массив просто выкидываем сериализация классная штука!)
0
|
3 / 3 / 1
Регистрация: 28.08.2010
Сообщений: 29
|
|
26.06.2014, 21:36 [ТС] | 7 |
FMRed, нет. для большого обьема данных сериализация не подойдет. твой метод подойдет если только дополнительно хранить инфу по дням. а в полях твоей таблицы будут значения которые будут обновлятся раз в день.
Кто знаком с движком kernelTube? интересно как они там сделали эту возможность
0
|
8 / 8 / 3
Регистрация: 26.06.2014
Сообщений: 47
|
|
26.06.2014, 21:49 | 8 |
mazaxaka,
я конечно не знаю что именно в статистике ты хочешь хранить, но как я себе представляю объём массива за месяц будет не больше по размеру, обычной статьи Там же надо указать только кол-во просмотров, кол-во уникальных просмотров итого будет 3поля*30дней == 90 элементов массива 3поля*7дней==21эллемент кол-во строк в таблице==кол-во статей но это подразумевает обработку раз в сутки, то есть дёргать каждый раз всё это из БД не придётся при этом корректный вывод для пользователя тоже можно настроить не сильно напрягаясь
0
|
3 / 3 / 1
Регистрация: 28.08.2010
Сообщений: 29
|
|
26.06.2014, 22:06 [ТС] | 9 |
FMRed, я о том говорю. что проще вытащить по ОРДЕР необходимое значение с базы сейчас опишу что в идеале надо
Есть у нас таблица с материалами ключевое поле назовем его id Есть вторая таблица с историей просмотров материала поля у него будут следующие id - int айди материала day - int -просмотры за текущий день week - int - просмотры за неделю mon - int - просмотры за месяц total - int - просмотры за месяц data_day2 - текущий день есть третяя таблица где у нас будет id - int айди материала visit- int -просмотры за текущий день data_day - текущий день Так вот. Как будет работать Пользователь заходит на материал который опубликовали в таблицу 2 в поле day защитывается просмотр тоесть было 3 стало 4 а в поле total добавляет 1 то есть было 100 стало 101 дальше заходит следующий пользователь, если день изменился и он первый за сегодня скрипт делает следующее 1. записывает в таблицу 3 в поле visit значение day и в поле data_day данные с таблицы 2 data_day2 2. записывает в таблицу 2 в поле day 1 и добавляет в тотал 1 3. обновляет поле week берет из таблицы 3 суммарное значние поля visit за последние 7 дней по определенному ид 4. обновляет поле mon берет из таблицы 3 суммарное значние поля visit за последние 30 дней по определенному ид Пока это лучшее что я вижу. Не вижу смысла хранить сериарилированый массив еще.
0
|
26.06.2014, 22:06 | |
26.06.2014, 22:06 | |
Помогаю со студенческими работами здесь
9
Плагины для 1С Битому: "Избранное", история просмотров, история посещения Неверная история просмотров История просмотров через роутер Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\php\mysql.php on line 16 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |