2014-05-09 47 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 
)