我正在研究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
问题是我必须显示它们,如下图所示
图片说明: - 每周,每月和所有时间都是标签 - 红色箭头表示排名是否从上周改变
所以用symfony2或mysql做任何想法?
感谢
答案 0 :(得分:1)
您可以使用case
和group by
获取最后两个时间段内每个用户的值。这肯定会产生一个无法在Doctrine中轻松编写的select语句,你也许可以用DQL来编写它。
另一种选择是在MySQL中编写一个视图,然后将其用作Symfony程序中的表。曾经在MySQL中具有可怕性能的视图,但可能已经改进。