#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);