В данной статье мы разберём ведение статистики просмотров материала на языке PHP. Мы создадим очень сложный SQL запрос, а вы уже сами будете вставлять его в ваши PHP-скрипты.
Не буду рассусоливать и сразу перейду к делу, для начала нам нужна таблица в базе данных MySQL, SQL запрос для создания:
CREATE TABLE IF NOT EXISTS `statistica` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`idpost` int(11) NOT NULL,
`count` int(11) NOT NULL,
`dayofweek` enum("1","2","3","4","5","6","7") COLLATE utf8_general_ci NOT NULL,
`date` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8_general_ci COLLATE=utf8_general_ci AUTO_INCREMENT=1;
Значения полей:
id - уникальный идентификатор
idpost – ID статьи, для которой ведется подсчет посещений
count – счетчик
dayofweek – день недели (1-7, что соответствует понедельник-воскресенье)
date – дата
Базу данных мы создали, теперь пришла очередь очень сложного SQL запроса:
INSERT INTO `statistica`
(`id`,`idpost`,`count`,`dayofweek`,`date`)
VALUES (
(IFNULL((SELECT `bwp`.`id`
FROM `statistica` as `bwp`
WHERE
`idpost`="{$idpost}" and
`dayofweek`=(IF(DAYOFWEEK(CURDATE())=1,7,
(DAYOFWEEK(CURDATE())-1)))
LIMIT 1),null)),
"{$idpost}",
"1",
(IF(DAYOFWEEK(CURDATE())=1,7,(DAYOFWEEK
(CURDATE())-1)))
,UNIX_TIMESTAMP()
)
ON DUPLICATE KEY UPDATE
`statistica`.`count` = ((IFNULL((SELECT `bwp`.`count`
FROM `statistica` as `bwp`
WHERE
`idpost`="{$idpost}" and
`dayofweek`=(IF(DAYOFWEEK(CURDATE())=1,7,
(DAYOFWEEK(CURDATE())-1))) and
`date`=CURDATE()
LIMIT 1),0)+1)),
`statistica`.`date` = UNIX_TIMESTAMP();
Данный SQL запрос очень сложный, он и анализирует, и обновляет, и добавляет и так далее...
Весб запрос вы можете вставить в PHP скрипт и посмотреть какой он будет работать(естественно если таблица не пустая), для работы просто создайте скрипт и обновляйте страницу, после чего просто выведите статистику таким SQL запросом:
SELECT `statistica`.`idpost`,
sum(`statistica`.`count`) as count,
FROM `statistica`
WHERE
`statistica`.`dayofweek`<=(IF(DAYOFWEEK(CURDAT())=1,7,
(DAYOFWEEK(CURDATE())-1)))
GROUP BY `statistica`.`idpost`
ORDER BY count desc
LIMIT 10
Вот и всё, для написания такого-же сложного SQL запроса требуются годы обучений, и большое количество знаний. Данный запрос я увидел в интернете, и выложил у себя на сайте в этой статье, так как он мне очень понравился своей мощью и силой. Так как я плохо знаю SQL запросы - вам придётся всё разбирать самим, я конечно чем смогу тем помогу, пишите в комментариях и постараюсь ответить, а нет так нет... На этом всё, до свидания...