繁体   English   中英

在“公司简介”上按热门十大公司的SQL-还是更好的解决方案?

[英]SQL for Top10 Companies by Hits on Company Profile - or a better solution?

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

我希望在nnn到nnn的时间段内,在“公司简介”上显示“按点击次数排名前10位的公司”。

MySQL Table追踪公司资料的点击

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

手写未测试。 基本思想是使用子查询。 如果对大数据进行计算,将会非常慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM