Для начала mysql плохое хранилище для подобных задач. Посмотрите в сторону memcached или redis.
На примере redis:
Используем LSET для записи в специальный список. Это будут онлайн пользователи.
Логика такая, пришел пользователь - записали его id и выставили expire на минуту например. Если пользователь уже внесен в список мы просто обновим expire, что бы запись не удалилась.
Далее LRANGE выбрать всех пользователей из списка(или часть если надо). Показываем где хотим.
Это будет работать быстро, без напряга для бд, без сложных запросов, тупо по ключам(т.е. id пользователей)
Загнал, так мы весему списку таймаут обновим. Но логика такая. (Отредактировано автором: 14 Августа, 2014 - 10:25:18)
|