SQL,每列中计数等效值



我正在使用PHP&MySQL跟踪每个URL的访问。我提供了一张访问的表,主要由这些属性组成:

time_in_second | country | referrer |  os   | browser | device | url_id
#####################################################################
1348128639     |    US   |   direct |  win  | chrome  | mobile | 3404  
1348128654     |    US   |   google | linux | chrome  | desktop| 3404  
1348124567     |    UK   |   twitter| mac   | mozila  | desktop| 3404  
1348127653     |    IND  |   direct | win   | IE      | desktop| 3465  

现在我想在此表上进行查询。例如,我想用url_id=3404获取URL的访问数据。因为我应该提供统计信息并绘制图形,所以我需要这些数据:

  • 此URL的每种操作系统的数量,例如20个Windows,15 Linux,...
  • 在每个所需的时间内的访问次数,例如过去24小时的每10分钟
  • 每个国家的访问人数
  • ...

如您所见,某些数据这样的数据可能会接受许多不同的值。

我可以想象的一个好主意是进行查询,哪个在每列中输出每个唯一值的数字,例如在国家/地区的情况下,在num_US上给出的数据,一个用于num_UK,一个用于num_IND

现在的问题是如何在SQL(MySQL)中实现这样的高性能查询?

另外,如果您认为这不是对性能的有效查询,那么您的建议是什么?

任何帮助将得到深深的赞赏。

更新:查看此问题:SQL;仅计算每列中指定的值。我认为这个问题与我的相似,但是对于每列而言,可能的差异在于可能的多种值(因为country property是可能的值),这使查询更加复杂。

看起来您需要进行多个查询。您可能可以编写一个带有不同参数的查询,但这会变得复杂且难以维护。我将其作为多个小查询。因此,对于每个要求,我都会进行查询,并单独或单独调用它们。例如,如果您想要提到的国家查询,则可以执行以下

SELECT country, count (*) FROM <TABLE_NAME> WHERE url_id = 3404 GROUP BY Country

顺便说一句,我尚未测试此查询,因此可能不准确,但这只是为了给您一个想法。我希望这会有所帮助。

另外,另一个建议是使用Google Analytics(Analytics),研究它,它们确实有很多您已经实施的内容,也许也有帮助。

欢呼。

您要绘制的每个图表都代表一个单独的关系,因此我的现行响应是您无法构建单个查询对于您要绘制的每个图。

从这一点开始,您的选择是:

  1. 使用不同的查询对不同的图表
  2. 向客户发送一堆数据,并让其进行所需的后处理,以创建针对不同图表所需的确切数据集
  3. 将其全部耕种到Google Analytics(a la @wahab-mirjan)

如果选择选项2,则可以通过计数命中量(10分钟,OS,浏览器,设备,url_id)Tupple来最大程度地减少发送的数据量。从本质上讲,这实际上删除了所有重复的行,并为您提供了计数。客户端软件将采用这些数字,并按国家(或其他)进一步减少它们,以获取图形所需的数字。老实说,我认为您为自己的收益不多买了额外的复杂性。

如果您坚持自己执行此操作(而不是使用服务),请为每种图形进行不同的查询。从几个合理的索引开始(url_id和time_in_second是显而易见的起点)。使用explain语句(或数据库提供的任何内容)来了解如何执行每个查询。

对不起,我是新手堆叠溢出,并在注释格式中遇到问题。这是我的答案,希望现在可以工作:

不确定表现如何差。我想的方式是,您最终会得到一张看起来像这样的桌子:

country | count 
################# 
     US | 304 
     UK | 123 
     UK | 23 

因此,当您按国家/地区分组时,它将是一个查询。我认为这将使您朝着正确的方向前进。无论如何,这只是一种意见,因此,如果您找到其他批准,我也有兴趣知道它。

对那里的评论表示歉意..

欢呼

相关内容

  • 没有找到相关文章

最新更新