php - 公司概况点击量排名前 10 名的公司的 SQL - 或者更好的解决方案?

标签 php mysql sql count having-clause

我浏览了与此问题相关的所有 500 多个答案的摘要,但没有发现针对我的问题的明显 SQL 解决方案。也许没有。

我希望显示从 nnn 到 nnn 时间段的公司简介点击量排名前 10 的公司。

用于跟踪公司简介点击率的 MySQL 表

CREATE TABLE `hit_company` (
  `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
  `hitdate` date NOT NULL DEFAULT '0000-00-00',
  `customerid` mediumint(9) unsigned NOT NULL DEFAULT '0',
  `organization` varchar(80) DEFAULT NULL,
  `hitstamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `remote_addr` varchar(20) DEFAULT NULL,
  `hittime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=123456 ;

24 小时报告的 MySQL 查询如下所示:

SELECT hitstamp,hitdate,customerid,organization, COUNT(organization) AS 'count' FROM hit_company 
WHERE hitstamp >= '2014-01-12 21:23' AND hitstamp <= '2014-01-13 21:23' 
GROUP BY customerid ORDER BY count DESC LIMIT 10

这会产生 Top10。问题是,通过改变remote_addr,我的点击量显着增加,这些人刷新了他们的公司资料页面,从而人为地增加了他们的点击计数器。我只想在报告时间范围内计算每个公司每个 IP 1 票。

我已经考虑过但不确定如何编写类似于以下内容的代码:

WHERE COUNT(remote_addr < 2)
or
GROUP BY customerid, remote_addr HAVING 'votes' < 2

...这样,在最终结果中,每个公司的同一 IP 地址不会被计算多次。

执行此操作的 SQL 是什么?

如果没有sql,php/mysql中的最佳解决方案是什么?

谢谢。

注意 虽然此报告的时间跨度为 24 小时,但其他报告的时间跨度从 12 小时到 30 天不等。

最佳答案

SELECT whatever FROM (
    SELECT whatever FROM hit_company
    WHERE hitstamp >= whatever
    GROUP BY organization, remoteaddr
) GROUP BY customerid ORDER BY count

手写未经测试。基本思想是使用子查询。如果数据量大的话,会很慢。

关于php - 公司概况点击量排名前 10 名的公司的 SQL - 或者更好的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21107029/

相关文章:

mysql - 如何在 MySQL 的多列唯一约束中将时间跨度指定为键?

sql - 用于安装 SQL Server Express Management Studio 2008 的 Pb

MySQL - 如何计算主查询的行数,忽略子查询行?

php - $post->post_parent 在页面上的行为与在 functions.php 中的行为不同

php - postman (chrome 应用程序)在将发布的 JSON 代码传递给 API(codeigniter)时返回 500 内部服务器错误

error-handling - 我应该如何设置 PHP CLI 的错误日志?

javascript - 单击链接时如何在同一页面上显示框

php - 链接 MySQL 命令与。原始查询

mysql - CASE Mysql 的 Null 检查

php - 当您只插入几行时,MySQL 中的单个多个 INSERT 是否会在速度上产生很大差异?