я уже создавал тред, где вопрошал, как же лучше сделать количество просмотров страниц, ибо извините, но дергать базу ради целого sql-запроса, чтобы только сделать +1.. не нужная нагрузка.
поэтому лучшим вариантом было написать парсер access.log веб-сервера (по крону, каждые пару минут), где смотреть на запрашиваемый URI, распарсивать, создавать переменные с циферками, а потом залпом, одним запросом, обновить данные в базе.
Картинка: http://ompldr.org/vaWVxMA
Скрипт весь на картинке, но поясню: открываем файл fopen, читаем построчно fgets, достаем из каждой строки запрошенный URI (проверяем статус 200, чтобы небыло ошибок при SQL запросе), собственно парсим URI, - проверяем, что была запрошена нужная статья в блоге, страница, был загружен файл и т.д., и делаем +1 к переменной. А после, разом проходимся по всем переменным, собираем все в кучу и составляем один единственный SQL запрос на апдейт множества статей:
UPDATE blog_posts SET post_count_views = post_count_views + CASE post_uri
WHEN post-id-1 THEN 11111
WHEN post-id-2 THEN 12345
WHEN post-id-3 THEN 67890
END WHERE post_id IN (post-id-1,post-id-2,post-id-3)
Выполняем. ?????. PROFIT!.
Сперва думал сделать при помощи grep/sed/gawk, но мой опыт в регексах и прочих утилитах очень скуден, поэтому выбрал php, на котором можно написать тот-же скриптик и засунуть в крон /usr/bin/php /srv/http/sites/spfng.com/crond-2min.php на каждые две минуты. :)
Ну и, чтобы до кучи, я планирую дополнить сбор статистики еще прочим: все подозрительные запросы, попытки XSS/SQL атак и пр. будут складываться отдельно. После каждого парсинга лог будет очищаться - а зачем он нужен, если вся статистика собирается... За сим все. :)
UPD: и вот вам еще одно преимущество такого способа: кэширование. когда мы кэшируем страницу, то отдаваться она будет из кэша и счетчик +1 из скрипта больше срабатывать не будет. а вот записи в логах появляются всегда. поэтому количество просмотров страницы продолжает обновляться даже при последующем обновлении кэша.