Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как у вас осуществлено : Список участников форума в "OnLine" ?
 
 автор: вопрос_MYSQL   (22.10.2004 в 12:47)   письмо автору
 
 

Как у вас осуществлено : Список участников форума в "OnLine" ?

   
 
 автор: cheops   (22.10.2004 в 13:08)   письмо автору
 
   для: вопрос_MYSQL   (22.10.2004 в 12:47)
 

После "входа" на форум время последнего посещения автора обновляется при каждой загрузке страниц index.php (список тем) и read.php (просмотр тем), а так же при создании новых тем и сообщений.
При переходе по ссылке "OnLine" осуществляется два SQL-запроса к базе данных MySQL о числе посетителей чьё время последнего посещения находится в интервале от 0 до 5 минут назад и от 5 до 10 минут назад. Первые помечаются как присутсвующие (зелённый цвет), вторые как уходящие (серый цвет).
Активные:
SELECT * FROM authors
WHERE time > NOW() - INTERVAL '5' minute
ORDER BY time DESC

Уходящие:
SELECT * FROM authors
WHERE time > NOW() - INTERVAL '10' minute AND
  time < NOW() - INTERVAL '5' minute
ORDER BY time DESC

   
 
 автор: Axxil   (22.10.2004 в 13:34)   письмо автору
 
   для: cheops   (22.10.2004 в 13:08)
 

WHERE time > NOW() - INTERVAL '5' minute 

функция NOW в каком формате? И как её можно соотнести к date из PHP.
Т.е у меня на форуме даты храняться именно в формате date("U"). Вопрос: могу ли я к этим датам применять эту безусловно очень удобную функцию NOW?

   
 
 автор: cheops   (22.10.2004 в 14:32)   письмо автору
 
   для: Axxil   (22.10.2004 в 13:34)
 

Да функция NOW() работает с любым временным типом MySQL (так как MySQL всё-равно преобразует любое время во внутренний формат - в секунды с 1 января 1970 года). Более того, вы можете вернуть время из MySQL в любом формате, не пребегая в преобразованиям в PHP
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=393
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=357
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=275
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=275

PS Формат PHP-функции не оказывает влияние на представление времени в MySQL, большее влияние оказывает тип столбца: DATETIME, TIME, DATE...

   
 
 автор: 1999   (17.01.2006 в 18:26)   письмо автору
 
   для: cheops   (22.10.2004 в 14:32)
 

а какого типа должен быть столбец time?

   
 
 автор: cheops   (17.01.2006 в 22:35)   письмо автору
 
   для: 1999   (17.01.2006 в 18:26)
 

Лучше если это будет DATETIME

   
 
 автор: вопрос_MYSQL   (22.10.2004 в 14:03)   письмо автору
 
   для: cheops   (22.10.2004 в 13:08)
 

А какие есть еще пути решения?
Как сделано на других сатах и формах (PHPBB)?

   
 
 автор: cheops   (22.10.2004 в 15:02)   письмо автору
 
   для: вопрос_MYSQL   (22.10.2004 в 14:03)
 

Скорее всего так же (что-то никак архив с phpВВ найти не могу у себя :() - здесь вариантов практически нет, хотя можно ещё по ссесиям определять, т.е. осуществлять не запрос к базе данных, а обход суперглобального массива $_SESSION.

   
 
 автор: Artemy   (22.10.2004 в 17:48)   письмо автору
 
   для: cheops   (22.10.2004 в 13:08)
 

Можно ли измерять в часах или сутках или вообще в месяцах, а не в минутах?

   
 
 автор: cheops   (22.10.2004 в 18:33)   письмо автору
 
   для: Artemy   (22.10.2004 в 17:48)
 

Ну... от текущего времени, возвращаемого функцией NOW() можно вычесть любой интервал, лишь бы результат не попал за 1970 год :)))
Вычитаем 10 дней
SELECT NOW() - interval 10 day

Вычитаем 7 часов
SELECT NOW() - interval 7 hour

Вычитаем 2 года
SELECT NOW() - interval 2 year

   
 
 автор: elenaki   (17.01.2006 в 18:53)   письмо автору
 
   для: cheops   (22.10.2004 в 13:08)
 

а как выводить эти данные без перехода, т.е. прямо на странице, где юзер находится?
и еще, я после определенного интервала, если авторизованный юзер "заснул", т.е. не кликает, никуда не переходит, ничего не открывает, перевожу его в разряд просто гостей. просто гости у меня обновляются с интервалом 30 секунд, а юзерам я дала 15 минут. но вот такой юзер "проснулся", начал опять ползать по сайту... но его статус уже только гостя (при этом сессия его не закрывается, он по-прежнему имеет доступ ко всем ресурсам, требующим авторизацию), просто счетчик считает его как гостя, а не как авторизованного юзера. чтобы изменился его статус, ему нужно снова залогиниться. и еще - юзер может, авторизовавшись, просто захлопнуть окно и уйти, не нажав "Выход". как в таком случае РНР поймет, что строку этого эзера надо удалить? время жизни сессии - 3600 ( т.е час?). но я проверила, строка с моей последней сессией не удалялась и после суток...

   
 
 автор: cheops   (17.01.2006 в 22:39)   письмо автору
 
   для: elenaki   (17.01.2006 в 18:53)
 

Хм... а зачем его в список гостей переводить? Нельзя его просто уничтожить?
>а как выводить эти данные без перехода, т.е. прямо на странице, где юзер находится?
Не очень понятно, что вызывает сложность, просто выводите небольшую таблицу прямо на странице...

   
 
 автор: elenaki   (18.01.2006 в 09:25)   письмо автору
 
   для: cheops   (17.01.2006 в 22:39)
 

если страница не обновляется, то и данные на ней не будут соответствовать
действительности. перевожу в разряд гостей как раз по той причине, что его нужно
учитывать, но неизвестно ушел он или просто зачитался. просто гостей сосчитать
легко. труднее выделить из них авторизованных...

   
 
 автор: cheops   (18.01.2006 в 12:45)   письмо автору
 
   для: elenaki   (18.01.2006 в 09:25)
 

Хм... всё-равно что мне не нравится этот подход, следующим логичным шагом будет ввод в таблицу гостей дополнительного поля, является он гостем или нет, а это выглядит как-то не естественно... Мы обычно и гостей и авторизованных пользователей сваливаю в одну таблицу, но помечаем гостя как анонима, а авторизованного пользователя его именем...

   
 
 автор: elenaki   (18.01.2006 в 13:00)   письмо автору
 
   для: cheops   (18.01.2006 в 12:45)
 

и у меня они в одной таблице. гости с id=0, юзеры - со своим id. мне непонятно, как
отследить момент окончания сессии. сессия заканчивается нормально, если юзер
нажал на Logout и вышел. а если просто закрыл окно, то сессия не "умирает" сама
собой, как вроде должно быть... и как отследить "проснувшегося" юзера, который вдруг
после долгого молчания, начал какие-то действия на сайте производить. мне клиент
говорит так просто - ну посмотри как в Нюке (у него сейчас Nuke) и сделай также. легко
сказать! в этом Нюке тыща файлов, все модулями подключается, ни фига не найти...

   
 
 автор: cheops   (18.01.2006 в 15:23)   письмо автору
 
   для: elenaki   (18.01.2006 в 13:00)
 

А вы через 15 минут его просто выкидывайте из таблицы - придёт опять с этой сессией регистрируйте его в таблице по новой, как будто он зашёл по новой с новой сессией... или там на вход тоже что-то завязано... Не могу понять зачем авторизованные пользователи в гостей переводятся.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования