私の 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()
orをサポートしているわけではないことを私は知っていますMONTH()
)?