私のデータベースでは、次の構造を持つ次のテーブルを取得しました。
[taskdate_user]
id : int
user_id : int
taskdate_time : datetime
たとえば、次のデータを含む2行を取得した場合:
id : 1
user_id : 1
taskdate_time : 2013-01-25 10:15
id : 2
user_id : 1
taskdate_time : 2013-01-25 11:15
ユーザーとtaskdate_timeの組み合わせの最も早い時間を除外する必要があります。私は今次のクエリを受け取りました:
// Get all the TaskdateUser objects for this week
$taskdateuser = TaskdateUser::where('taskdate_time', '>=', $this_monday)->where('taskdate_time', '<', $this_sunday)->order_by('taskdate_time', 'ASC')->get();
これにより、今週のすべてのTaskdateUserオブジェクトが取得されますが、すべてが返されます。現在、taskdate_timeで注文しており、昇順で行っています。したがって、user_idとtaskdate_timeの組み合わせの最初のオブジェクトをそれぞれ選択します。
これは、最初のuser_idと日付の組み合わせを除外するための多くの余分なコードのようです。誰かがこれを単純化するための提案がありますか?よろしくお願いします!
編集2:
ユーザーごと、日付ごとに、最も早い時間が必要です。
クエリを次のように編集しました:
$taskdateuser = TaskdateUser::where('taskdate_time', '>=', $monday)
->where('taskdate_time', '<', $sunday)
->raw_where('id IN
(
SELECT id
FROM taskdate_user
GROUP BY date_format(taskdate_time, "%Y-%m-%d"), user_id
)')
->order_by('taskdate_time', 'ASC')
->get();
すべてのtaskdate_timesをエコーすると、出力は次のようになります。
2013-01-21 14:14:00
2013-01-21 17:47:02
2013-01-25 10:56:00
2013-01-26 17:56:41
2013-01-26と2013-01-25に複数のtaskdate_timeがあり、1回だけ表示されます。そして、2013-01-21は常に2回表示されます。どうしてこれなの?