基于多个唯一列表构建MYSQL查询

时间:2010-09-15 22:18:47

标签: php sql mysql

抱歉这个糟糕的标题 - 不知道怎么说。

我有一个评论数据库,任何人都可以报告滥用评论(任何人都不会登录成员)。这显然意味着一个人可以多次报告评论。我需要帮助的地方是建立一个查询,显示报告评论的次数,但是通过唯一的电子邮件地址和IP地址。

我不确定这是否清楚 - 如果IP地址1.2.3.4的joe@joe.com多次报告一条消息,它将只计为一个报告。如果有另外的记录为joe@joe.com且IP为4.5.6.7且报告相同的评论,则由于IP不同,它将被视为两份报告。

字段,全部在一个表中:

  • ID
  • COMMENT_ID
  • 注释
  • 电子邮件
  • IP_ADDRESS

我希望一切都有意义,任何帮助都会非常感激!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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));