【发布时间】:2013-04-16 11:53:27
【问题描述】:
我正在尝试获取用户到目前为止使用的所有 ip。
"SELECT * FROM `logfeeds` WHERE uid=3"
简单的查询给出了所有的 ip,但我想要的是每个 ip 只获取一次。
日志提要
我希望查询每个 uid 只返回一次每个 IP。
截图有 id = 23 和 id = 29,但它应该只显示 id = 23,因为 id=23 和 id=29 具有相同的 ip。
【问题讨论】:
我正在尝试获取用户到目前为止使用的所有 ip。
"SELECT * FROM `logfeeds` WHERE uid=3"
简单的查询给出了所有的 ip,但我想要的是每个 ip 只获取一次。
日志提要
我希望查询每个 uid 只返回一次每个 IP。
截图有 id = 23 和 id = 29,但它应该只显示 id = 23,因为 id=23 和 id=29 具有相同的 ip。
【问题讨论】:
使用以下查询:
"SELECT * FROM `logfeeds` WHERE uid=3 GROUP BY ip"
这肯定对你有用。
【讨论】:
distinct,因为它是更正确的方法。
【讨论】:
如果您每次只需要一次 IP,请使用 DISTINCT。
SELECT DISTINCT ip, * FROM `logfeeds` WHERE uid=3;
如果您关心最常见的 IP,请使用 GROUP BY
SELECT *, COUNT(ip) as logged_in_count FROM `logfeeds` WHERE uid=3 GROUP BY ip ORDER BY logged_in_count DESC;
虽然 GROUP BY 在您需要计数时有效,但在其他情况下最好使用 distinct,因为它是更正确的方法。
【讨论】:
这假设id 和timestamp 步长增加
并且您想要所有列(您确实使用了SELECT *)
SELECT
MIN(id), uid, ip, MIN(timestamp)
FROM
logfeeds
WHERE
uid=3
GROUP BY
uid, ip
【讨论】:
你应该尝试不同的语句
SELECT DISTINCT(ipcolumn) FROM logfeeds ....
【讨论】:
试试这个:
"SELECT Distinct(ip),timestamp FROM `logfeeds` WHERE uid=3"
【讨论】: