MySQL,需要在另一个表中选择具有最频繁值的行

时间:2010-11-19 06:25:50

标签: php sql mysql sql-server

我是SQL的新手,我无法找到问题的解决方案。我有两张桌子。在表A中,我存储了很多注释,每个注释都有一个唯一的ID。

在表B中,我为每个具有日期时间的评论存储每个投票(如= 1和不喜欢= 0)。每次投票都会有一个条目,因此表A中的每条评论都会有大量的行。

我需要检索所有评论并对其进行排序,以便每周最喜欢的评论位于顶部,但我不确定如何。

这是我到目前为止所做的,但不知道如何继续:

SELECT * FROM comment INNER JOIN logs ON comment.c_id=logs.c_id WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) AND logs.rated=1 

为了澄清,我需要从过去一周内评级为1的日志中获取所有条目,并按降序排列最频繁的c_id,并为每一行获取不同的c_id ......如果这有意义

如果我说得不够清楚,请提出问题,谢谢!!

2 个答案:

答案 0 :(得分:1)

    SELECT *
      FROM comment
INNER JOIN (SELECT comment.c_id,
                   COUNT(*) AS cnt
              FROM comment
        INNER JOIN logs ON comment.c_id=logs.c_id
             WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY)
               AND logs.rated=1
          GROUP BY comment.c_id) x ON x.c_id = comment.c_id
  ORDER BY x.cnt DESC

答案 1 :(得分:-1)

试试这个 -

我首先查询了日志表中的所有记录,这些记录的评级为1,从当前日期起7天,并且还根据c_id的计数进行排序。然后将其加入到COmments表中。

SELECT Comment.* FROM comment C
INNER JOIN (SELECT logs.c_id as c_id,count(logs.c_id) as logcount FROM logs 
WHERE logs.rated=1 
AND logs.daterate BETWEEN GETDATE() AND DATEADD(day,-7,getdate())
Group by logs.c_id
order by count(logs.c_id) desc) X 

ON C.c_id = X.c_id
ORDER BY X.logcount DESC