これがシナリオです。このようなスキーマを持つ2つのテーブルがあります
体験: (id, タイトル)
user_experience: (id、experience_id、created_date)
ユーザーが自分の to do リストにエクスペリエンスを追加すると、レコードが user_experience に追加されます。ここで、エクスペリエンスが 2、5、または 10 人のリスターのマイルストーンを達成した日付を取得したいと考えています。
必要な結果: id (experience.id)、title、created_date、count (エクスペリエンスをリストしたユーザーの数)
エクスペリエンスが 10 人のリスターを獲得した場合、結果には、2 人および 5 人のリスターを獲得した時間に対応するレコードが含まれます。
このクエリを使用して必要な結果を取得し、より良い「クエリ」を探しています。
SELECT e.id, e.title, ue_res.created_date, ue_res.count FROM
experience e INNER JOIN
(
SELECT ue.experience_id, (
SELECT COUNT(uee.id) FROM user_experience uee WHERE uee.experience_id = ue.experience_id AND uee.created_date <= ue.created_date
) AS `count`, ue.created_date FROM user_experience ue
) ue_res
ON e.id = ue_res.experience_id
WHERE ue_res.uecount IN (2,5,10)
ORDER BY e.id,ue_res.created_date ASC
マイルストーンはいつでも変更できるため、実績用に別のテーブルを作成することはできません。そのため、クエリを探しているだけです。
ここにいくつかのサンプルデータがあります
経験のためのサンプルデータ:
1 | Bunjee jump from Eifel Tower
2 | Surf in Rio
3 | Fly over Grand Canyon
4 | Go to a Mexican resturant
user_experience のサンプル データ:
1 | 1 | 2013-03-01
2 | 4 | 2013-03-02
3 | 1 | 2013-03-03
4 | 3 | 2013-03-04
5 | 2 | 2013-03-05
6 | 3 | 2013-03-06
7 | 4 | 2013-03-07
8 | 1 | 2013-03-08
9 | 1 | 2013-03-09
10 | 1 | 2013-03-10
11 | 3 | 2013-03-11
12 | 2 | 2013-03-12
13 | 2 | 2013-03-13
サンプルデータの結果:
1 | Bunjee jump from Eifel Tower | 2013-03-03 | 2
3 | Fly over Grand Canyon | 2013-03-06 | 2
4 | Go to a Mexican resturant | 2013-03-07 | 2
1 | Bunjee jump from Eifel Tower | 2013-03-10 | 5
2 | Surf in Rio | 2013-03-12 | 2
前もって感謝します :)