[英]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.