【发布时间】:2014-07-23 03:27:47
【问题描述】:
我有一个模型Login,其中包含userName 和time 字段。我正在尝试在 Eloquent 中编写代码,让最后 n 人登录。
我尝试了许多看起来最直接的变体:
$logins = Login::groupBy('userName') ->orderBy('time', 'desc') ->take($num)->get() ;
很遗憾,日期不是用户最近的登录信息。如果我删除orderBy,数据是有意义的,但此时它仅按用户名排序。需要按时间排序才能成为最后n次登录。
谢谢!
编辑:
看起来就像上面写的那样,结果是用户第一次登录的日期,然后给出了最近的 10 次“首次登录”。
这意味着 groupBy 保留最旧的日期。我不知道如何解决它,但也许这可以帮助某人。
编辑 2:
现在使用 ceejayoz 的建议,我有:
$logins = Login::orderBy(DB::raw('MAX(time)'), 'desc')->groupBy('userName') ->orderBy('time', 'desc') ->take($num)->get() ;//->sortByDesc('time')
现在它提供最近登录的用户,但time 仍然提供他们的第一次登录。我可以将我的视图从使用 time 更改为 ... 代表 MAX('time') 的东西(不确定它的标题),或者使用 AS 来获得不同的名称(尝试过但我没有让它工作)。
快到了! :)
【问题讨论】:
-
只是出于好奇,如果不是按时间降序排列,它们返回的顺序是什么?
-
当我删除
orderBy时,它会在userName上按字母顺序返回。 -
好的,我觉得你的原始问题很清楚。 orderBy 会发生什么?
-
对不起,你是对的。实际上它看起来很奇怪而且几乎是随机的,但它不是——它很有趣。以上更新。
-
等等,关于什么?
标签: laravel