2011-11-20 74 views
0
SELECT DISTINCT(user),user,ip FROM logins GROUP by ip 

这应该是从登录表中选择具有相同的IP唯一用户。由于某种原因它只返回一行。没有冲突ips的用户不应该被拉。与MySQL查询问题(分组)

+1

不应该只是SELECT DISTINCT(user),ip FROM logins GROUP by ip? – ComfortablyNumb

+0

@菲尔是的,但它似乎并没有解决问题。 – domino

+0

您能否更具体地了解这个问题?如果你和汤姆拥有相同的IP,并且插口有独特的ip,你期望输出什么 – ComfortablyNumb

回答

1

选择用户,从登录IP其中IP在(
选择IP FROM登录组通过IP HAVING COUNT(用户)> 1)

+0

最近的一个。 ( SELECT ip FROM登录组通过ip HAVING COUNT(user)> 1) 否则它返回相同的用户,因为它们并不全都是唯一的。非常感谢。 – domino

+0

此外,任何想法,为什么我不能用户*在这里 - DISTINCT(用户),*。我必须输入所有列名吗? – domino

+0

另一个奇怪的是,当我添加更多列时,DISTINCT命令似乎停止工作。 – domino

2

这是你想要的吗? :

SELECT DISTINCT 
     logins1.user user1, 
     logins2.user user2, 
     logins1.ip 
    FROM logins logins1 
    JOIN logins logins2 
    ON logins2.user > logins1.user 
    AND logins2.ip = logins1.ip 
; 

上述将发现每对不同user S的与共同的ip,与该ip在一起。 (注意:如果两个以上的用户共享一个IP,这将为该IP返回多行,例如,如果有四个用户A/B/C/D,它将返回六行AB/AC/AD/BC/BD/CD是否可以?)

+0

您的描述符合我所寻找的内容,但代码似乎没有这样做。我有4行(所有唯一用户),两个重复的ips,它只返回一行。 – domino

+0

@domino:糟糕,对不起,我在'SELECT DISTINCT'子句中有'logins1.user'两次,当其中一个显然应该是'logins2.user'时。现在再试一次? – ruakh

+0

现在几乎工作:)。我可以将每个用户作为单独的行而没有额外的列吗?对于具有相同IP的4个唯一用户,它目前返回六行。 (六种独特的组合)。这不完全是我想要的,但非常接近。 – domino

0

DISTINCT表示“不同”,如果您的所有用户具有相同的ip,则使用GROUP BY ip将只显示表中的一条记录。您的查询是正确的!

如果要显示除DISTINCT用户以外的所有记录。 (拆分重复记录,然后从您的查询结束删除GROUP BY)

+0

如果没有分组,它会返回偶数行而没有重复的ips .. – domino