2010-09-15 42 views
1

對不起,這個蹩腳的標題 - 不知道該怎麼說。基於多個獨特列表構建MYSQL查詢

我有一個評論數據庫,任何人都可以舉報濫用評論(任何人都不只是登錄成員)。這顯然意味着一個人可以多次報告評論。我需要幫助的地方是建立一個查詢,顯示評論被報告的次數,但是通過唯一的電子郵件地址和IP地址。

我不確定這是否清楚 - 如果[email protected]的IP地址1.2.3.4多次報告一條消息,它只會計爲一條報告。如果有額外的[email protected]記錄,IP爲4.5.6.7則報告相同的評論,但由於IP不同,因此它會計爲兩個報告。

的領域,都在同一個表:

  • ID
  • COMMENT_ID
  • 電子郵件
  • IP_ADDRESS

我希望所有有意義,任何幫助將非常感謝!

+1

你爲什麼要允許倍數? [在兩列上設置一個唯一的約束](http://dev.mysql.com/doc/refman/5.0/en/create-index.html) – 2010-09-15 22:23:58

+0

原諒我的簡單性,但我想要的記錄與電子郵件和IP的完全匹配對於任何給定的評論只能計算一次(comment_id) – 86Stang 2010-09-15 22:29:32

+0

您可以請發佈一些示例數據和您想獲得的記錄集嗎? – Quassnoi 2010-09-15 22:29:35

回答

2
SELECT email, ip_address, COUNT(DISTINCT note) 
FROM log 
GROUP BY 
     email, ip_address 

更新:

按您的意見,我相信你想這樣的:

SELECT comment_id, COUNT(DISTINCT email, ip_address) 
FROM log 
GROUP BY 
     comment_id 
+0

(DISTINCT筆記)與丹尼爾(*)的比較是什麼? – 86Stang 2010-09-15 22:25:50

+0

如果'joe'提交三份報告:「垃圾郵件」,「垃圾郵件」,「火腿」; 「垃圾郵件」將只計算一次。 – Quassnoi 2010-09-15 22:28:14

+0

不,它會被計算兩次....(垃圾郵件+火腿) – Wrikken 2010-09-15 22:30:13

1
SELECT 
    comment_id, 
    COUNT(DISTINCT CONCAT(email,'|',ip_address)) 
FROM log 
GROUP BY comment_id 

由於OMG小馬說,在電子郵件中加入了獨特的+ IP_ADDRESS將有助於,可能是爲了防止丟失紙幣:

INSERT INTO log (...) VALUES (...) ON DUPLICATE KEY note = CONCAT(note,' ',VALUES(note));