我在symfony2项目上工作,我必须写一个查询,根据不同时期(每周,每月和所有时间)的评论数量显示排名的用户。
所以我有这样的结构:
user table (user) review table (review)
+---+--------+ +---+--------+------+-----+
|id |username| |id |user_id |title |desc |
+------------+ +------------+------+-----+
|5 | mark | |1 | 5 | tt | aaa |
|6 | steve | |2 | 7 | tt | aaa |
|7 | user | |3 | 6 | tt | aaa |
+---+--------+ +---+--------+------+-----+
review log view table (review_view)
+----------+--------+---------------------+
|review_id |user_id |viewed_at |
+----------+--------+---------------------+
|1 | 1 | 2014-06-05 15:12:00 |
|2 | 2 | 2014-06-05 15:12:00 |
|3 | 8 | 2014-06-05 16:12:00 |
|1 | 1 | 2014-06-05 15:12:00 |
|2 | 2 | 2014-06-07 20:12:00 |
|3 | 10 | 2014-06-07 15:12:00 |
|1 | null | 2014-06-07 15:12:00 |
|2 | 2 | 2014-06-09 15:12:00 |
|3 | 3 | 2014-06-09 15:12:00 |
|1 | 1 | 2014-06-09 15:12:00 |
|2 | 20 | 2014-06-09 15:12:00 |
|3 | 8 | 2014-06-03 15:12:00 |
+---+--------+------+---------------------+review_view表每次用户( user_id )查看评论时记录(review_id)对于未登录的用户,user_id可以为null
问题是我必须显示它们,如下图所示

图片描述:-每周、每月和所有时间都是选项卡-红色箭头表示排名是否与上周相比发生了变化
那么有什么想法可以用symfony2或者mysql来实现呢?
谢谢
发布于 2014-06-19 07:12:48
您可以使用case和group by来获取每个用户最近两个时间段的值。这肯定会产生一个不能用Doctrine轻松编写的select语句,你也许可以用DQL来实现。
另一种选择是用MySQL编写一个视图,然后将其作为Symfony程序中的一个表来使用。视图在MySQL中的性能曾经很糟糕,但现在可能已经有所改善。
https://stackoverflow.com/questions/24296317
复制相似问题