как узнать если пользователи сейчас на сайте хотя бы подскажите с чего начать и поставить значок online или offline заранее спасибо
Давно писал, очень давно ... две жизни назад. У меня была такая таблица: [sql]CREATE TABLE `apple_online` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `sid` char(40) NOT NULL, `ip` char(32) NOT NULL, `extern` int(10) unsigned DEFAULT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MEMORY AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;[/sql] Объясняю: 1. id [тут всё понятно] 2. sid [идентификатор сессии] Со вторым не всё так гладко. Со стороны РНР выглядело это так: PHP: <?php ini_set("session.hash_function", 1); ini_set("session.hash_bits_per_character", 4); session_start(); ?> 3. ip [MD5 хеш IP адреса пользователя] 4. extern [внешний ID] Это обычно NULL если юзер не залогинен, иначе туда пишем его ID и при выборке джойном его достаём из другой таблицы. 5. time [время, когда юзер был отмечен активным последний раз] Обновление шло по принципу "раз в 15 минут". Считал так: если в остатке текущей минуты ноль (т.е деление без остатка), идет обновление, иначе выборка из кеша. Пример выборки при наличии таблицы apple_users: [sql]SELECT u.`name`, u.`group` FROM `apple_online` AS `a` LEFT JOIN `apple_users` AS `u` ON (a.`extern` = u.`id`);[/sql] Структура таблицы apple_users (упрощенная до нельзя): [sql]CREATE TABLE `apple_users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL, `group` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/sql] Со стороны РНР считали num_rows (мне как-то не хотелось делать запрос ради COUNT, а UNION не катит тут). Потом уже формируем и отсеиваем. Если заранее нет пользователей, то там ещё проще - никаких джойнов, один единственный COUNT =) В случае с подсчетом привелегий пользователей мы это делаем на стороне РНР, никакого запроса для GROUP BY, поскольку мы всё равно делаем перебор и "расфасофку" по группам.