【问题标题】:Counting the number of instances of some data in a mySQL column计算 mySQL 列中某些数据的实例数
【发布时间】:2010-09-27 12:20:35
【问题描述】:

我有 1 个名为 urltracker 的表,其中包含有关特定 url 被点击次数的信息。该表结构为 4 列 id、urlclicked、referrer 和时间戳。每次点击 url 时,urltracker 都会在表中创建另一个条目。

我想做的是显示一个特定的 url 和它被点击的次数,然后用户可以通过点击来深入了解数据,以显示这个 url 被点击的所有特定时间。

我不是 sql 专家,但这听起来我需要首先显示所有不同的 URL,然后是一个子查询,它显示这个特定 url 的所有条目。

我的想法是对的还是有更简单的方法?

【问题讨论】:

    标签: mysql aggregate-functions


    【解决方案1】:

    类似的东西应该可以解决问题: 第一:

    SELECT urlclicked, 
           COUNT(*)
      FROM urltracker
    GROUP BY urlclicked
    

    然后当用户点击某个网址时:

    SELECT id, 
           urlclicked, 
           referrer,
           timestamp
    FROM urltracker
    WHERE urlclicked = ?clickedUrl
    

    显示详细信息。

    【讨论】:

    • 我以前做过——效果很好。但它不能很好地扩展。一旦其中有大量数据,使用 group by 的第一个查询可能需要一段时间。虽然没有一个简单的方法......但是如果要经常查看它,它可能值得定期缓存总数。
    • 我同意如果真的有很多数据,可能会出现扩展问题。但是这个问题并没有说什么,所以这不是真正的主题恕我直言。
    【解决方案2】:

    要考虑的一件事是使用两个表 - 一个包含唯一 url 的表和另一个存储点击信息的表(并且使用唯一的序列号来连接它们,或者使用 url(因为它是唯一的))

    但要回答您的查询问题 - 是的,我将有一个查询来显示 URL,第二个查询来获取特定 URL 的数据(仅当/当用户请求该信息时)。

    【讨论】:

      【解决方案3】:

      您应该能够执行以下操作来获取每个 URL 的总数:

      SELECT urlclicked, COUNT(urlclicked) AS total
      FROM urltracker
      GROUP BY urlclicked
      

      这就是你想要的吗?

      【讨论】:

        【解决方案4】:

        是的,在某种程度上你是对的:

        SELECT id, 
               tb1.urlclicked, 
               referrer,
               timestamp, tb2.totaltimesclicked
        FROM urltracker as tb1
        inner join 
        (SELECT urlclicked, 
               COUNT(urlclicked) as totaltimesclicked
          FROM urltracker
        GROUP BY urlclicked) as tb2
        on tb1.urlclicked = tb2.urlclicked 
        

        这将显示所有信息以及每个网址被点击的次数。

        【讨论】:

          猜你喜欢
          • 2015-04-29
          • 1970-01-01
          • 1970-01-01
          • 2016-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多