簡體   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