[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Количество посетителей на сайте
Krevedko
Как лучше всего сделать отображение текущих посетителей на сайте ?
В голову приходит только писать в таблицу скажем ип и время при каждом обновлении страницы пользователем и выводить количество через select где время будет равно текущее время минус скажем 15 минут (Если 15 минут бездействовал-нафиг с пляжу).
Не нравится мне конечно, что мусора много в таблице будет...получается каждый хит будет писать...или проще нельзя ?




Спустя 16 минут, 31 секунда (15.08.2009 - 13:30) Gradus написал(а):
Так в основном и делают smile.gif

Спустя 3 минуты, 55 секунд (15.08.2009 - 13:33) Krevedko написал(а):
Допустим 5000 просмотров за день (не хосты, а хиты)...все это пишется.
Через полгода база не будет лагать ? )

Спустя 8 минут, 53 секунды (15.08.2009 - 13:42) Gradus написал(а):
Krevedko,а не сори я вообще не в ту степь подумал smile.gif
http://freshcoder.ru/archives/65

Спустя 15 минут, 59 секунд (15.08.2009 - 13:58) Krevedko написал(а):
через кукисы...хм..кукисы могут быть отключены.
Я вот че придумал. Писать в таблицу только уникальные айпи, а если айпи уже есть, то обновлять просто там время и в колонку хитов этого айпи добавлять +1.

Спустя 19 минут, 21 секунда (15.08.2009 - 14:18) Krevedko написал(а):
сделал пока примерно как-то так. вроде работает.

PHP
$ip = $_SERVER['REMOTE_ADDR'];
    $result = mysql_query ("SELECT count(`ip`) as amount
                            FROM count_users
                            WHERE ip = '$ip'"
 
                            
,CONNECT);
    # Проверка на ошибку запроса  
    valid_query($result);
    $row = mysql_result($result,'');
    if ($row['amount'] == 0)
    {    
        $result 
= mysql_query ("INSERT INTO `count_users` (`ip`,`login`,`date`)
                                 VALUES ('$ip', 'null', NOW())"
,
                               CONNECT);
        # Проверка на ошибку запроса  
        valid_query($result);
    }
    else
    
{
        $result = mysql_query ("UPDATE `count_users`
                                 SET hits = hits + 1,
                               date = NOW()
                               WHERE ip = '$ip'"
                               ,CONNECT);
   # Проверка на ошибку запроса  
        valid_query($result);
    }

Спустя 9 минут, 24 секунды (15.08.2009 - 14:27) Gradus написал(а):
Ну я бы посоветовал получше определять ip smile.gif

Спустя 6 минут, 57 секунд (15.08.2009 - 14:34) Krevedko написал(а):
эт я для локалки пока тестю

Спустя 2 часа, 8 минут, 19 секунд (15.08.2009 - 16:42) glock18 написал(а):
Цитата (Krevedko @ 15.08.2009 - 11:18)
сделал пока примерно как-то так. вроде работает.

PHP
$ip = $_SERVER['REMOTE_ADDR'];
    $result = mysql_query ("SELECT count(`ip`) as amount
                            FROM count_users
                            WHERE ip = '$ip'"
 
                            
,CONNECT);
    # Проверка на ошибку запроса  
    valid_query($result);
    $row = mysql_result($result,'');
    if ($row['amount'] == 0)
    {    
        $result 
= mysql_query ("INSERT INTO `count_users` (`ip`,`login`,`date`)
                                 VALUES ('$ip', 'null', NOW())"
,
                               CONNECT);
        # Проверка на ошибку запроса  
        valid_query($result);
    }
    else
    
{
        $result = mysql_query ("UPDATE `count_users`
                                 SET hits = hits + 1,
                               date = NOW()
                               WHERE ip = '$ip'"
                               ,CONNECT);
   # Проверка на ошибку запроса  
        valid_query($result);
    }

попробуй вместо select-insert/update использовать запрос insert .. update on duplicate. Один запрос вместо трех. smile.gif

Спустя 2 часа, 10 минут, 39 секунд (15.08.2009 - 18:53) Krevedko написал(а):
ага. спс !
еще такой вопрос...
как ввести в переменную время минус 15 минут ?

пробовал как-то типа
$time = date("H:i-15:s");
$time = date("H:i:s") -15 ;
-не понимает

Спустя 58 минут, 11 секунд (15.08.2009 - 19:51) Gradus написал(а):
Krevedko,
$time = date("His")-1500; забей на разделитель smile.gif

Спустя 2 минуты (15.08.2009 - 19:53) Krevedko написал(а):
у меня в базе разделитель. я ж сравнивать потом буду с данными в базе

Спустя 2 минуты, 24 секунды (15.08.2009 - 19:56) Krevedko написал(а):
как сделать, чтобы было с разделителями ?

Спустя 8 минут, 58 секунд (15.08.2009 - 20:05) Raito-kun написал(а):
PHP
$time=date("H:i:s", time()-900);


пробуй smile.gif 15 минут в секундах нужно брать.

Спустя 8 минут, 5 секунд (15.08.2009 - 20:13) Krevedko написал(а):
ух ты, работает.
спасибо тебе, о мудрейший !!!

Спустя 1 час, 4 минуты, 28 секунд (15.08.2009 - 21:17) Nikitian написал(а):
Очень полезная функция для работы с датами wink.gif
PHP
strtotime('-15 minute');

Спустя 25 минут, 5 секунд (15.08.2009 - 21:42) Krevedko написал(а):
спасибо, мне уже очень помог Василий (долгих лет ему)

...WHERE TIMESTAMPDIFF(MINUTE, date, NOW()) <= 15"

Спустя 2 часа, 30 минут, 4 секунды (16.08.2009 - 00:12) DeeKeiD написал(а):
хм помойму проще делать сессиями

Спустя 11 часов, 58 минут, 30 секунд (16.08.2009 - 12:11) Krevedko написал(а):
Цитата (glock18 @ 15.08.2009 - 13:42)
попробуй вместо select-insert/update использовать запрос insert .. update on duplicate. Один запрос вместо трех. smile.gif

SQL
INSERT INTO `count_users` (`ip`,`login`,`date`,`hits`,`referer`)
VALUES ('$ip', 'null', NOW(), 1, '$referer')
UPDATE ON DUPLICATE SET hits = hits + 1


что-то матюгается он у меня на вторую половину (((
как правильно написать ?
Рылся рылся в мануале, тольком не нашел ничего

Спустя 14 минут, 43 секунды (16.08.2009 - 12:25) glock18 написал(а):
как-то ты невнимательно рылся:
Цитата

ON DUPLICATE SET


мануал:
Цитата
ON DUPLICATE KEY UPDATE ...;


Спустя 44 секунды (16.08.2009 - 12:26) Krevedko написал(а):
может мануал другой. ты где смотрел ?

Спустя 5 минут, 4 секунды (16.08.2009 - 12:31) Gradus написал(а):
Я чёто первый раз такое вижу
"UPDATE ON DUPLICATE SET" ты сам то где такое откапал ?)

Спустя 4 минуты, 50 секунд (16.08.2009 - 12:36) glock18 написал(а):
хоспати. было бы место в подписи, я бы туда уже ссылки засунул все )))

пользуйтесь первоисточниками:
взял с dev.mysql.com. дупликаты определяются по уникальным ключам. с этим внимательно

Спустя 3 минуты, 52 секунды (16.08.2009 - 12:40) Krevedko написал(а):
Gradus -ты не поверишь, но оно еще и работает. biggrin.gif

Просто я синтаксис неправильно написал...спасибо Василию-помог. Короче правильно так

SQL
$result = mysql_query ("INSERT INTO `count_users` (`ip`,`login`,`date`,`hits`,`referer`)
VALUES ('$ip', 'null', NOW(), 1, '$referer')
ON DUPLICATE KEY UPDATE hits = hits + 1"
,CONNECT);

Спустя 1 минута, 39 секунд (16.08.2009 - 12:42) Gradus написал(а):
Krevedko,круто smile.gif но ты всё таки кинь ссылочку интересно...

Спустя 19 минут, 33 секунды (16.08.2009 - 13:01) Krevedko написал(а):
ссылка

пора уже наверное кошелек заводить, да Василию деньги кидать rolleyes.gif

Спустя 14 минут, 5 секунд (16.08.2009 - 13:15) glock18 написал(а):
Да, не забудьте, что по ip должен быть уникальный ключ, чтобы это работало так, как надо.

Спустя 2 часа, 2 минуты, 55 секунд (16.08.2009 - 15:18) Krevedko написал(а):
Люююди. Пожалуйста зайдите кто-нибудь (два-три человека)
на мой сайт

тут

хочу проверить счетчик.

кстати кто пожелает...могут войти что-нибудь написать.
логин-пароль
admin
11111111

если лень регаться

Спустя 42 минуты, 59 секунд (16.08.2009 - 16:01) Krevedko написал(а):
Да, все работает. Благодарю. Вижу, что зашло 2 человека с этого форума. Один сделал 2 перехода по страницам, другой 12.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.