MySQL выбирает пользователей, которые получают доступ к сайту с разных ip

#mysql #sql

#mysql #sql

Вопрос:

Как должен выглядеть запрос SQL SELECT, если я хочу выбрать пользователей, которые получили доступ к сайту с разных ip?

Это содержимое таблицы:

 id | ip        | userid | timecreated
1  | 192.0.0.1 | 1      | 111111111
2  | 192.0.0.1 | 3      | 111111111
3  | 192.0.0.2 | 1      | 111111111
4  | 192.0.0.3 | 2      | 111111111
5  | 192.0.0.2 | 2      | 111111111
  

Выполнение необходимого запроса SQL SELECT должно выглядеть следующим образом:

 id | ip        | userid | timecreated
1  | 192.0.0.1 | 1      | 111111111
3  | 192.0.0.2 | 1      | 111111111
4  | 192.0.0.3 | 2      | 111111111
5  | 192.0.0.2 | 2      | 111111111
  

Кто-нибудь может мне помочь с этим?

Заранее благодарю вас!

Ответ №1:

Если вы хотите, чтобы пользователи имели более одного IP-адреса:

 SELECT DISTINCT userid FROM myTable GROUP BY ip HAVING COUNT(*) > 1; 
  

И для того, чтобы получить полные записи для них (как у вас в вашем вопросе):

 SELECT * FROM myTable WHERE userid IN (
 SELECT DISTINCT userid FROM myTable GROUP BY ip HAVING COUNT(*) > 1
);
  

Ответ №2:

Получение userid s — это просто агрегирование с having предложением:

 select userid
from t
group by userid
having min(ip) <> max(ip);
  

Если вам нужны подробные строки, вы можете использовать join или in :

 select t.*
from t join
     (select userid
      from t
      group by userid
      having min(ip) <> max(ip)
     ) tt
     using (userid);