在我的 Symfony2/Doctrine2 应用程序中,我有一个实体,分别是我的数据库中的一个表,我在其中跟踪每个用户,如果他或她在指定日期执行了特定操作。
我的桌子看起来像这样,我们称之为track_user_action
:
+---------+------------+
| user_id | date |
+---------+------------+
| 1 | 2013-09-19 |
| 2 | 2013-09-19 |
| 1 | 2013-09-18 |
| 5 | 2013-09-18 |
| 8 | 2013-09-17 |
| 5 | 2013-09-17 |
+---------+------------+
我想检索一组行,其中显示过去 30 天、相应的工作日以及指定用户是否在此表中有条目,例如对于具有以下内容的用户user_id = 1
:
+------------+--------------+-----------------+
| date | weekday | has_done_action |
+------------+--------------+-----------------+
| 2013-09-20 | Friday | false |
| 2013-09-19 | Thursday | true |
| 2013-09-18 | Wednesday | true |
| ... | | |
| 2013-08-20 | Tuesday | false |
+------------+--------------+-----------------+
我可以想到LEFT JOIN
一个日期表和我的track_user_action
. 但是仅仅为日期创建一个特殊的表似乎是没有意义的。MySQL 应该能够应付这些日子,不是吗?
方法:
SELECT
# somehow retrieve last 30 days
date AS date,
DAYNAME(date) AS weekday,
IF ... THEN has_done_action = true ELSE has_done_action = false
# and according weekdays
LEFT JOIN track_user_action AS t
ON t.date = # date field from above
WHERE t.user_id = 1
ORDER BY # date field from above
DESC
LIMIT 0,30
我的问题:
- 获取这种结果的好的(My)SQL 查询是什么?
- 这个查询在 Doctrine2 中可实现多远(我知道 Doctrine2 不支持所有 MySQL 语句,例如
YEAR()
orMONTH()
)?