Victim 5 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 Добрый день. Скажите пожалуйста Как можно вывести общее количество пользователей на главную страницу сайта? Типа сделать такой блок на сайте "Нас уже: ХХХХХ" Заранее спасибо. Цитата Ссылка на сообщение Поделиться на других сайтах
Olegyarp 0 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 на 4dle выкладывали множество блоков статистики. Слегка подправить код и будет выводить только число юзеров Цитата Ссылка на сообщение Поделиться на других сайтах
Shinji 0 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 $row = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_users"); $stats_users = $row['count']; $tpl->set('{allusers}', $stats_users); и в шаблоне проставляешь {allusers}, но это + 1 запрос на каждое отображение страницы. Если есть большое желание, то можешь прикрутить кеш Цитата Ссылка на сообщение Поделиться на других сайтах
Pimen 0 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 Если есть большое желание, то можешь прикрутить кеш Без кэша, при хорошей посещаемости запросы вида "SELECT COUNT(*) as count" дадут бешеную нагрузку. Цитата Ссылка на сообщение Поделиться на других сайтах
Shinji 0 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 Кеш делается элементарно в правке файла регистрации... здесь не просили написать, оптимизщировать и разложить по полочкам, а просили способ как сделать - они его получили... Цитата Ссылка на сообщение Поделиться на других сайтах
Victim 5 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 Автор Э...огромное вам спасибо. Но вы меня напугали сказав про нагрузку...потому что посещаемость как никак 4000 пользователей, про просмотры страницы вообще молчу... Можете помочь с решением данной проблемы? Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 (изменено) Victim, есть множество решений вашей проблемы. Вот два из них: 1. Записать значение в файл и читать его оттуда. Плюс: уменьшаем количества запросов к БД на 1 для каждой загрузки страницы. Минус: при изменении количества пользователей файл необходимо обновлять. 2. записать значение в сессию и читать его оттуда. Плюс: уменьшаем количества запросов к БД на 1 для каждой загрузки страницы одним пользователем. Минус: при посещении 4000 посетителей в сутки имеем 4000 лишних запросов в сутки. Изменено 13 февраля 2008 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
Victim 5 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 Автор Такс...я так предполагаю что вариант 1 это что то типа кеша. Но вот файл ручками что ли придется обновлять?? оО если ручками то это совсем не вариант... Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 зачем ручками? система сама поменяет, но для этого нужно внести изменения по крайней мере в 3-х местах Цитата Ссылка на сообщение Поделиться на других сайтах
Victim 5 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 (изменено) Автор Хм...и много там менять? Мануальчик бы если вам не сложно... PS Я вот думаю...у меня конечно выделенный сервер и не думаю что +1 запрос к базе будет критичным...но тем не менее наверное лучше перестраховаться...как думаете? Изменено 13 февраля 2008 пользователем Victim Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 (изменено) Вообще думаю, что можно обойтись изменением всего одного файла (index.php или init.php - как удобнее). Просто обновлять количество пользователей раз в час, например. Лишних 24 запроса в сутки не критично. Что-то вроде того /************************/ $filename = ENGINE_DIR.'/cache/stats_users.tmp'; // Читаем кэш файл if (file_exists($filename)) { //Сравниваем время кэша с текущем, если больше 3600 (час) - удаляем кэш if ((time() - 3600) > filemtime($filename)) { $stats_users = FALSE; @unlink ($filename); } else $stats_users = @file_get_contents($filename); } else $stats_users = FALSE; if (!$stats_users) { $row = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_users"); $stats_users = $row['count']; // Записываем значение в кэш $fp = fopen($filename, 'wb+'); fwrite($fp, $stats_users); fclose($fp); @chmod($filename, 0755); } $tpl->set('{allusers}', $stats_users); /************************/ Изменено 13 февраля 2008 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
Victim 5 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 Автор Спасибо вам огромное! Все отлично работает! Я очень рад! В копилку свою положу...пригодится Цитата Ссылка на сообщение Поделиться на других сайтах
Greeze 0 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 COUNT(*) as count запрос будет не легче, если сделать через id? Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 13 февраля 2008 Рассказать Опубликовано: 13 февраля 2008 COUNT(id) as count? По моему нет Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 30 августа 2008 Рассказать Опубликовано: 30 августа 2008 COUNT(*) as count запрос будет не легче, если сделать через id? user_id, пк. Физических подтверждений дать не могу, но в других скриптах * встречаю редко, всегда идёт подсчёт по пк (если такой есть), да и мне как-то советовали использовать всегда главный ключ, а не звёзлочку. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.