gpt4 book ai didi

php - Laravel Eloquent 限制每个用户的结果 - 日期组合

转载 作者:行者123 更新时间:2023-11-29 08:38:28 25 4
gpt4 key购买 nike

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

[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 对象,但它确实返回所有对象。现在,我按任务日期时间排序,并且按升序排序。因此,我为 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 次。这是为什么?

最佳答案

Get the latest date from grouped MySQL data

您将必须使用原始查询,但如果我理解您想要什么,那应该对您有帮助。

类似于:

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

关于php - Laravel Eloquent 限制每个用户的结果 - 日期组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14534758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com