Передо мной встала задача: нужно получить IP-адреса и информацию о пользователях, у которых эти самые IP-адреса совпадают. Решение такое:

SELECT *
FROM users
WHERE ip IN (
  SELECT ip
  FROM users
  GROUP BY ip
  HAVING count(ip) > 1
)
ORDER BY ip

На выходе мы получим что-то примерно такое:

login 1 127.0.0.1

login2 127.0.0.1

login3 127.0.0.1

....

login N 127.0.0.1

Обратите внимание, что скорость выполнения данного запроса прямо зависит от количества записей в таблице users. Больше записей — дольше будет выполняться запрос. Не рекомендую его выполнять к таблице, у которой больше 5.000 записей (в таком случае нужно будет «изобретать» что-то другое).

Как с помощью MySQL получить пользователей, которые были на сайте на протяжении N минут? Например на протяжении 10 минут. Вот так вот:

SELECT *
FROM users
WHERE last_enter > NOW() - INTERVAL 10 MINUTE
SELECT *
  FROM users
 WHERE last_enter >= DATE_SUB(NOW(), INTERVAL 10 MINUTE)

Поле last_enter должно иметь тип DATETIME. Этот метод может стать полезным тем, кому нужно, например, получить тех пользователей, которые находятся онлайн. Естественно, понятие «онлайн» здесь не совсем то, что нужно, потому что выбираются не те пользователи, которые действительно онлайн, а те, которые были активными в определенный промежуток времени (5, 10, 15, … минут).

Здравствуйте, уважаемые читатели моего блога! Недавно на Хабре я публиковал один пост, который как-то неочень понравился его контингенту (видать для таких «гуру» пост оказался слишком простым). Сейчас пост находится в черновиках, а здесь я публикую его, т. к. все же считаю, что пост может быть достаточно интересным. В этом посте хотел бы поделиться своим личным опытом […]