【问题标题】:Mysql Query: Display all unique IPs for a given user IDMysql 查询:显示给定用户 ID 的所有唯一 IP
【发布时间】: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。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    使用以下查询:

    "SELECT * FROM `logfeeds` WHERE uid=3 GROUP BY ip"
    

    这肯定对你有用。

    【讨论】:

    • 虽然 GROUP BY 有效,但最好使用 distinct,因为它是更正确的方法。
    • @Aaron Harun 谢谢 :) 我忘记了不同的大声笑我知道 :P 但搞砸了这么多代码 :P
    【解决方案2】:

    使用不同的:

    来自mysql doc

    DISTINCT 指定从结果集中删除重复行。

    SELECT distinct ip FROM logfeeds WHERE uid=3;
    

    【讨论】:

      【解决方案3】:

      如果您每次只需要一次 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,因为它是更正确的方法。

      见:How to select unique records by SQL

      【讨论】:

        【解决方案4】:

        这假设idtimestamp 步长增加
        并且您想要所有列(您确实使用了SELECT *

        SELECT
           MIN(id), uid, ip, MIN(timestamp)
        FROM
           logfeeds
        WHERE
           uid=3
        GROUP BY
           uid, ip
        

        【讨论】:

          【解决方案5】:

          你应该尝试不同的语句

          SELECT DISTINCT(ipcolumn) FROM logfeeds ....

          更多信息:http://www.w3schools.com/sql/sql_distinct.asp

          【讨论】:

            【解决方案6】:

            试试这个:

            "SELECT Distinct(ip),timestamp FROM `logfeeds` WHERE uid=3"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-08-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-04
              • 2021-09-29
              • 2023-01-30
              • 2021-08-20
              相关资源
              最近更新 更多