2014-05-09 46 views
1

我有两张表,我想列出所有共享IP的帐户。例如,如果使用Id 1帐户,而使用Id 2的帐户使用Session并使用相同的IP查找重复帐户

帐户表:

Name: Account 

Id ... (more column names here) 

会话表:

Id Creator Token Expires IP 

我已经试过到目前为止以下,但它不是做得比较工作。

SELECT `Account`.`Id`, `Account`.`Username`, `Session`.`IP` 
FROM `Session` 
    JOIN `Account` 
    ON `Account`.`Id` = `Session`.`Creator` 
WHERE `IP` != '' 
GROUP BY `Session`.`Creator`; 
+0

是否像“'Account'.'Username'”的工作?为什么你反反复复?除了2个比较之外,我不认为需要引用任何引用,其中您可能应该使用单引号或双引号。 – jordan

回答

1

我猜你需要GROUP_CONCAT()

SELECT 
GROUP_CONCAT(`Account`.`Id`), 
GROUP_CONCAT(`Account`.`Username`), 
`Session`.`IP` 
FROM `Session` 
JOIN `Account` ON `Account`.`Id` = `Session`.`Creator` 
WHERE `IP` != '' 
GROUP BY `Session`.`Creator` 
HAVING COUNT(*) > 1 

这会给你帐户ID的逗号分隔的列表,用户名,谁拥有相同Creator

注:该事实它有一个洁具默认限制为1024个字符,但可以增加,这可以在手册中定义

0

您可以找到具有多个帐户的IP

SELECT 
    IP, 
    COUNT (DISTINCT Creator) 
FROM 
    `Sessions` 
GROUP BY IP 
HAVING COUNT(DISTINCT Creator) > 1 

现在你必须加入这个查询的结果与您的帐户表:

SELECT 
    a.Id, 
    a.Username, 
    s.IP 
FROM 
    Account a 
INNER JOIN 
    Session s 
ON 
    a.Id = s.Creator 
WHERE s.IP IN (
    SELECT 
     IP, 
     COUNT (DISTINCT Creator) 
    FROM 
     `Sessions` 
    GROUP BY IP 
    HAVING COUNT(DISTINCT Creator) > 1 
)