我正在开发 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可以为空
问题是我必须如下图所示显示它们
图片说明: - 每周、每月和所有时间都是选项卡 - 红色箭头表示排名较上周是否发生变化
那么有什么想法可以用 symfony2 或 mysql 来实现吗?
谢谢
最佳答案
您可以使用 case
和 group by
获取每个用户最近两个时间段的值。这肯定会产生一条无法在 Doctrine 中轻松编写的 select 语句,您也许可以使用 DQL 来完成。
另一种选择是在 MySQL 中编写一个 View ,然后像 Symfony 程序中的表一样使用它。过去, View 在 MySQL 中的性能很糟糕,但现在可能已经有所改善。
关于php - symfony2 mysql 基于时间间隔的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296317/