【问题标题】:Laravel Eloquent limiting result per user - date combinationLaravel Eloquent 限制每个用户的结果 - 日期组合
【发布时间】:2013-01-26 07:11:50
【问题描述】:

在我的数据库中,我得到了具有以下结构的下表:

[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

我需要过滤掉 user 和 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 - date 组合。有人建议简化这个吗?非常感谢!

编辑 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 年 1 月 26 日和 2013 年 1 月 25 日有多个 taskdate_time,它们只会显示 1 次。而 2013-01-21 总是出现 2 次。这是为什么呢?

【问题讨论】:

标签: php mysql laravel eloquent


【解决方案1】:

Get the latest date from grouped MySQL data

您将不得不使用 RAW 查询,但如果我了解您想要什么,那应该会对您有所帮助。

类似:

$taskdateuser = DB::query(SELECT `id`,`user_id`,`taskdate_time` FROM `taskdate_user` WHERE `taskdate_time` IN (SELECT max(`taskdate_time`) FROM `taskdate_user`));

【讨论】:

  • 这是一个限制,它将结果限制为一个对象。这绝对不是我想要的。
  • @Jack,更新了我的答案。如果您也将 MySQL 标签添加到您的问题中,您会得到更好的答复。
  • Ezra,谢谢,但这也不是真正的答案。我需要 taskdate_time 和 user_id 组合是唯一的。这仅返回第一个 taskdate_time。因此,如果我有更多用户,则必须显示该用户的最早时间。
  • 独特是什么意思?只有您的数据库中存在的内容才能获得最新的任务时间。你还想要什么?
  • 啊,这么早,每个用户每个日期?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2019-09-08
  • 2013-02-20
  • 2021-01-26
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多