symfony2基于时间间隔的mysql排名

时间:2014-06-18 22:58:48

标签: php mysql symfony doctrine-orm

我正在研究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 |
+---+--------+------+---------------------+

每次用户(user_id)查看评论(review_id)时,review_view表日志对于未登录的用户,user_id可以为null

问题是我必须显示它们,如下图所示

ranked users

图片说明: - 每周,每月和所有时间都是标签 - 红色箭头表示排名是否从上周改变

所以用symfony2或mysql做任何想法?

感谢

1 个答案:

答案 0 :(得分:1)

您可以使用casegroup by获取最后两个时间段内每个用户的值。这肯定会产生一个无法在Doctrine中轻松编写的select语句,你也许可以用DQL来编写它。

另一种选择是在MySQL中编写一个视图,然后将其用作Symfony程序中的表。曾经在MySQL中具有可怕性能的视图,但可能已经改进。