php面试题

来源:互联网 发布:淘宝白菜网 编辑:程序博客网 时间:2024/06/10 21:41

抢沙发数据统计。

假设我们有一个文章系统,每个文章都可以被留言。

留言据保存在 comments 表中。comments表结构如下

字段名

含义

comment_id

留言id(主键)

article_id

被留言的文章的id

uid

写此留言的用户id

nickname

用户昵称

write_time

写留言的时间

抢沙发的定义:

给定一个开始时间 T1,结束时间 T2

如果一个留言是某文章的前5个留言,且留言时间介于T1T2之间,则认为满足抢沙发条件(另一种等价描述:对于每篇文章的前5个留言中,其中留言时间介于T1T2之间的留言符合抢沙发条件)。

要求:在给定开始时间T1和结束时间T2的情况下,统计出所有抢沙发成功的用户一共抢到多少个沙发(按抢到沙发的总数逆序排序)。例如:

用户昵称

满足抢沙发的留言总数

小明

32

小刚

25

小红

4

小白

1

小兰

1

编程过程中可以对一些外部条件作出假设(例如假设直接调用mysql查询得到结果),写出主要逻辑即可。

答案:

SELECTnickname 用户呢称, count(*) 满足抢沙发的留言总数FROMcomments AS aWHERE(SELECTCOUNT(*)FROMcomments AS bWHEREa.article_id = b.article_id AND a.comment_id > b.comment_id) < 5AND a.write_time >= '2012-09-17 00:00:00'AND a.write_time <= '2012-09-18 23:59:59'GROUP BY nicknameORDER BY 满足抢沙发的留言总数 DESC