我正在使用PHP& amp; MYSQL跟踪每个网址的访问量。我提供了一个访问表,主要包括这些属性:
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
的网址访问数据。因为我应该提供统计数据并绘制图表,对于这个网址,我需要这些数据:
如您所见,像国家这样的某些数据可能会接受许多不同的值。
我能想象的一个好主意是进行查询,输出每列中每个唯一值的数量,例如,在上面给出的数据的国家案例中,num_US
的列,{{1}的列1}},以及num_UK
的一个。
现在的问题是如何在sql(MYSQL)中实现这样的高性能查询?
另外,如果您认为这不是一个有效的性能查询,那么您的建议是什么?
任何帮助都将深深感激。
更新:查看此问题:SQL; Only count the values specified in each column。我认为这个问题与我的问题类似,但不同之处在于每个列可能存在各种值(因为num_IND
可能存在大量值),这使得查询更加复杂。
答案 0 :(得分:0)
看起来您需要执行多个查询。您可能可以使用不同的参数编写一个查询,但这会使其复杂且难以维护。我会将它作为多个小查询来处理。因此,对于每个要求,我都会进行查询并单独或单独调用它们。例如,如果您想要提到的国家/地区查询,则可以执行以下操作
SELECT country, count (*) FROM <TABLE_NAME> WHERE url_id = 3404 GROUP BY Country
顺便说一句,我还没有测试过这个查询,所以它可能不准确,但这只是为了给你一个想法。我希望这会有所帮助。
此外,另一个建议是使用谷歌分析,看看它,它们确实有很多你已经实施的东西,也许这也有帮助。
干杯。
答案 1 :(得分:0)
您要绘制的每个图形都代表一个单独的关系,因此我的袖口响应是您无法构建单个查询,该查询为您提供您想要绘制的每个图形所需的数据。
从这一点来说,你的选择是:
如果你使用选项2,你可以通过计算每(10分钟,操作系统,浏览器,设备,url_id)tupple的命中数来最小化你发送的数据量。这基本上删除了所有重复的行,并为您提供计数。客户端软件将获取这些数字并进一步按国家(或其他)减少它们以获得图形所需的数字。说实话,我认为你为自己买了额外的复杂性而不是很多。
如果您坚持自己这样做(而不是使用服务),那么对每种图形使用不同的查询。从几个合理的索引开始(url_id和time_in_second是明显的起点)。使用explain
语句(或数据库提供的任何语句)来了解每个查询的执行方式。
答案 2 :(得分:0)
抱歉,我是Stack Overflow的新手,并且注释格式有问题。这是我的答案,希望它现在有效:
不确定性能如何差。我想的方式是你最终得到一个如下表:
country | count
#################
US | 304
UK | 123
UK | 23
因此,当您按国家/地区分组并计数时,它将是一个查询。我想这会让你朝着正确的方向前进。在任何情况下,这只是一个意见,所以如果你找到另一个approch,我也有兴趣了解它。
对那里的评论搞砸道歉......
干杯