Mysql 从orders表中获取重复用户

Mysql 从orders表中获取重复用户,mysql,sql,database,Mysql,Sql,Database,我试图找到一种方法来检测那些拥有重复帐户并从我数据库中的表中排序的用户。我做了一些复杂的查询,还没有解决我的问题 第一个想法是按ip和countuser_id分组,但用户可以有多个订单,因此这些wll也会被计算。例如,如果我使用上述方法,ip 192.168.1.1将返回3,而不是我想要的2 我的数据就像 | order_id | user_id | ip | --------------------------------------- | 1001 |

我试图找到一种方法来检测那些拥有重复帐户并从我数据库中的表中排序的用户。我做了一些复杂的查询,还没有解决我的问题

第一个想法是按ip和countuser_id分组,但用户可以有多个订单,因此这些wll也会被计算。例如,如果我使用上述方法,ip 192.168.1.1将返回3,而不是我想要的2

我的数据就像

| order_id  |  user_id  |     ip      |
---------------------------------------
| 1001      |   2       | 192.168.1.1 |    
| 1002      |   5       | 192.168.1.1 |    
| 1003      |   2       | 192.168.1.1 |    
| 1004      |   12      |   18.15.0.1 |    
| 1005      |   9       |    10.0.0.1 |    
需要的结果 IP 192.168.1.1,因为它有两个不同的用户id

感谢您的帮助

尝试以下方法:

SELECT t.ip, t.user_id,
   (SELECT COUNT(1)
   FROM yourtable t3 WHERE t.user_id = t3.user_id
   AND t.ip = t3.ip) as total
FROM yourtable t
WHERE EXISTS(
    SELECT 'duplicate'
    FROM yourtable t2
    WHERE t.user_id = t2.user_id
    AND t.ip = t2.ip
    AND t.order_id < t2.order_id
)
试试这个:

SELECT t.ip, t.user_id,
   (SELECT COUNT(1)
   FROM yourtable t3 WHERE t.user_id = t3.user_id
   AND t.ip = t3.ip) as total
FROM yourtable t
WHERE EXISTS(
    SELECT 'duplicate'
    FROM yourtable t2
    WHERE t.user_id = t2.user_id
    AND t.ip = t2.ip
    AND t.order_id < t2.order_id
)
在计数中使用Distinct

在计数中使用Distinct


您正在寻找提供给多个用户的IP?然后按IP分组并统计不同的用户

select ip
from mytable
group by ip
having count(distinct user_id) > 1;
编辑:获取与之关联的用户

select user_id, ip
from mytable
where ip in
(
  select ip
  from mytable
  group by ip
  having count(distinct user_id) > 1
);
这与EXISTS子句相同:

select user_id, ip
from mytable
where exists
(
  select *
  from mytable other
  where other.ip = mytable.ip
  and other.user_id <> mytable.user_id
);

您正在寻找提供给多个用户的IP?然后按IP分组并统计不同的用户

select ip
from mytable
group by ip
having count(distinct user_id) > 1;
编辑:获取与之关联的用户

select user_id, ip
from mytable
where ip in
(
  select ip
  from mytable
  group by ip
  having count(distinct user_id) > 1
);
这与EXISTS子句相同:

select user_id, ip
from mytable
where exists
(
  select *
  from mytable other
  where other.ip = mytable.ip
  and other.user_id <> mytable.user_id
);


按ip分组,用户id?并保留countuser?id?您想要countorder?id,但我很确定它们将具有相同的值。countorder\u id只是让你做的事情更加明显定义“重复帐户”嗯,我想返回IP 192.168.1.1,因为它有2个用户id。。。Duplicate account=相同IP不同的用户\u id按IP分组,用户\u id?并保留countuser\u id?您想要countorder\u id,但我很确定它们将具有相同的值。countorder\u id只是让你做的事情更加明显定义“重复帐户”嗯,我想返回IP 192.168.1.1,因为它有2个用户id。。。Duplicate account=相同的IP不同的用户_idI正在寻找使用不同帐户注册和订购但相同IP地址的用户Duplicate usersOkay,当我们找到IP时,很容易获得IP的用户ID。我已经把这个添加到了may的回答中。你很接近我的想法。。。但是每次登录时,带有ip的members表都会刷新,所以我尝试使用用户id获取更多信息,用户id不会从表ordersWell更改,您有用户id,所以它只是一个到用户表的连接,以便您可以显示用户数据以及ip或其他IN子句,对吗?我已经实现了。。。真的谢谢。。增强了我:我正在寻求检测那些使用不同帐户注册和订购但相同IP地址重复用户的用户。因此,当我们找到IP时,很容易获得IP的用户ID。我已经把这个添加到了may的回答中。你很接近我的想法。。。但是每次登录时,带有ip的members表都会刷新,所以我尝试使用用户id获取更多信息,用户id不会从表ordersWell更改,您有用户id,所以它只是一个到用户表的连接,以便您可以显示用户数据以及ip或其他IN子句,对吗?我已经实现了。。。真的谢谢。。激励我:好的,在OP澄清之后,这是正确的答案。好的,在OP澄清之后,这是正确的答案。