2010-09-15 51 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));