|
|
|
| Как у вас осуществлено : Список участников форума в "OnLine" ? | |
|
|
|
|
|
|
|
для: вопрос_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
|
| |
|
|
|
|
|
|
|
для: cheops
(22.10.2004 в 13:08)
| |
WHERE time > NOW() - INTERVAL '5' minute
|
функция NOW в каком формате? И как её можно соотнести к date из PHP.
Т.е у меня на форуме даты храняться именно в формате date("U"). Вопрос: могу ли я к этим датам применять эту безусловно очень удобную функцию NOW? | |
|
|
|
|
|
|
|
для: 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... | |
|
|
|
|
|
|
|
для: cheops
(22.10.2004 в 14:32)
| | а какого типа должен быть столбец time? | |
|
|
|
|
|
|
|
для: 1999
(17.01.2006 в 18:26)
| | Лучше если это будет DATETIME | |
|
|
|
|
|
|
|
для: cheops
(22.10.2004 в 13:08)
| | А какие есть еще пути решения?
Как сделано на других сатах и формах (PHPBB)? | |
|
|
|
|
|
|
|
для: вопрос_MYSQL
(22.10.2004 в 14:03)
| | Скорее всего так же (что-то никак архив с phpВВ найти не могу у себя :() - здесь вариантов практически нет, хотя можно ещё по ссесиям определять, т.е. осуществлять не запрос к базе данных, а обход суперглобального массива $_SESSION. | |
|
|
|
|
|
|
|
для: cheops
(22.10.2004 в 13:08)
| | Можно ли измерять в часах или сутках или вообще в месяцах, а не в минутах? | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: cheops
(22.10.2004 в 13:08)
| | а как выводить эти данные без перехода, т.е. прямо на странице, где юзер находится?
и еще, я после определенного интервала, если авторизованный юзер "заснул", т.е. не кликает, никуда не переходит, ничего не открывает, перевожу его в разряд просто гостей. просто гости у меня обновляются с интервалом 30 секунд, а юзерам я дала 15 минут. но вот такой юзер "проснулся", начал опять ползать по сайту... но его статус уже только гостя (при этом сессия его не закрывается, он по-прежнему имеет доступ ко всем ресурсам, требующим авторизацию), просто счетчик считает его как гостя, а не как авторизованного юзера. чтобы изменился его статус, ему нужно снова залогиниться. и еще - юзер может, авторизовавшись, просто захлопнуть окно и уйти, не нажав "Выход". как в таком случае РНР поймет, что строку этого эзера надо удалить? время жизни сессии - 3600 ( т.е час?). но я проверила, строка с моей последней сессией не удалялась и после суток... | |
|
|
|
|
|
|
|
для: elenaki
(17.01.2006 в 18:53)
| | Хм... а зачем его в список гостей переводить? Нельзя его просто уничтожить?
>а как выводить эти данные без перехода, т.е. прямо на странице, где юзер находится?
Не очень понятно, что вызывает сложность, просто выводите небольшую таблицу прямо на странице... | |
|
|
|
|
|
|
|
для: cheops
(17.01.2006 в 22:39)
| | если страница не обновляется, то и данные на ней не будут соответствовать
действительности. перевожу в разряд гостей как раз по той причине, что его нужно
учитывать, но неизвестно ушел он или просто зачитался. просто гостей сосчитать
легко. труднее выделить из них авторизованных... | |
|
|
|
|
|
|
|
для: elenaki
(18.01.2006 в 09:25)
| | Хм... всё-равно что мне не нравится этот подход, следующим логичным шагом будет ввод в таблицу гостей дополнительного поля, является он гостем или нет, а это выглядит как-то не естественно... Мы обычно и гостей и авторизованных пользователей сваливаю в одну таблицу, но помечаем гостя как анонима, а авторизованного пользователя его именем... | |
|
|
|
|
|
|
|
для: cheops
(18.01.2006 в 12:45)
| | и у меня они в одной таблице. гости с id=0, юзеры - со своим id. мне непонятно, как
отследить момент окончания сессии. сессия заканчивается нормально, если юзер
нажал на Logout и вышел. а если просто закрыл окно, то сессия не "умирает" сама
собой, как вроде должно быть... и как отследить "проснувшегося" юзера, который вдруг
после долгого молчания, начал какие-то действия на сайте производить. мне клиент
говорит так просто - ну посмотри как в Нюке (у него сейчас Nuke) и сделай также. легко
сказать! в этом Нюке тыща файлов, все модулями подключается, ни фига не найти... | |
|
|
|
|
|
|
|
для: elenaki
(18.01.2006 в 13:00)
| | А вы через 15 минут его просто выкидывайте из таблицы - придёт опять с этой сессией регистрируйте его в таблице по новой, как будто он зашёл по новой с новой сессией... или там на вход тоже что-то завязано... Не могу понять зачем авторизованные пользователи в гостей переводятся. | |
|
|
|