0

私のデータベースでは、次の構造を持つ次のテーブルを取得しました。

[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回表示されます。どうしてこれなの?

4

1 に答える 1