最近活动计数

时间:2015-08-23 04:46:05

标签: mysql

我在mysql Post表和post_activity表中有两个表 发表如下

  Post_Id         Post               Post_Date         
-----------------------------------------------                       
    1           sample post 1       2015-05-01
    2           sample post 2       2015-06-01
    3           sample post 3       2015-06-02
-----------------------------------------------

这些帖子显示在一个页面中,用户可以查看,评论和喜欢这些帖子,这些活动存储在post_activity表中,如下所示

 Act_id       Post_Id      Activity       Act_date
-----------------------------------------------------
   1            1           commented      2015-07-01
   2            1           viewed         2015-07-01
   3            2           viewed         2015-07-01
   4            2           viewed         2015-07-01
   5            2           liked          2015-07-01
   6            2           commented      2015-07-01
   7            1           viewed         2015-07-02
   8            3           viewed         2015-07-03
   9            3           commented      2015-07-03
   10           2           viewd          2015-07-03
   11           2           commented      2015-07-03
   12           2           viewd          2015-07-03
   13           1           viewd          2015-07-03
 -----------------------------------------------------

我希望在用户访问该页面的当天按最近活动计数显示帖子,如果没有活动,那么它将根据前一天的活动显示等等 结果示例如下

在02-07-2015访问网站时,帖子将按以下顺序显示

   Sample Post 1
   Sample Post 2
   Sample Post 3

因为活动在2015年2月2日仅在post1上完成所以它是第一个,基于之前的日期活动计数来继续

在03-07-2015访问网站时,帖子将按以下顺序显示

   Sample Post 2
   Sample Post 3
   Sample Post 1

因为大多数活动都是在2015年3月3日在post2上完成的,所以它首先出现,接下来大部分活动都在第3期进行,所以它排在第2位等

在04-07-2015访问网站时,由于在04-07-2015没有活动,将在03-07-2015的顺序显示

建议我编写最好的mysql select查询来获得所需的输出

2 个答案:

答案 0 :(得分:1)

尝试以下查询

    select post,act_date from
    (
    select post,act_date,count(*) as cnt
    from post p inner join post_Activity pa on pa.post_id = p.post_id
    group by act_date,post_id
    ) t
    order by act_date desc,cnt asc

答案 1 :(得分:1)

这不是一个完整的答案,但希望它会成为一个指导。

下面的查询将计算在帖子和订单上完成的活动(查看,喜欢,...)的数量,并根据特定日期(当天用户访问该页面)显示

SELECT  `post`.`post` , COUNT(  `post_activity`.`post_id` ) AS  'number_of_act_on_post'
FROM  `post` 
LEFT JOIN  `post_activity` ON  `post`.`post_id` =  `post_activity`.`post_id` 
WHERE  `post_activity`.`act_date` =  '2015-07-03' 
GROUP BY  `post_activity`.`post_id` 
ORDER BY  `number_of_act_on_post` DESC 

如您所见,您可以通过上述查询获得“2015-07-03”日期的预期结果。但是对于'2015-07-02',它只输出一条记录(样本帖1),因为那个日期只有一条记录。对于像'2015-07-04'这样的日期,查询将返回空结果,因为在'post_activity'表中该日期下没有记录。如果您能解决这两个问题,那么您就得到了答案。