【问题标题】:Laravel. How to select entries for the last day拉拉维尔。如何选择最后一天的条目
【发布时间】:2019-02-10 02:09:34
【问题描述】:

我有一个包含字段 id、message 和 added_on (TIMESTAMP) 的消息表。 它有不同日子的记录。 如何只选择最后一天的所有条目?

【问题讨论】:

  • Message::whereBetween('created_at', [Carbon::now()->startOfDay(), Carbon::now()])->get();
  • @Indra,其中Between 的日期会明显变慢。
  • @Jerodev 是的,但是如果您使用索引正确设置了数据库,这应该不是一个大问题,而且从技术上讲,如果您经常这样做并且拥有足够大的数据库,您可以使用 unixtimestamp。根据解决方案,这是一个更长的讨论。他们可能只想查看昨天或 2 天前的条目,然后他们可以这样做或更改您的解决方案以添加另一个位置。
  • 您要获取过去 24 小时的条目还是“昨天”的条目?
  • 不,不是24。最后一天不一定是昨天,可能是5天前

标签: laravel laravel-5


【解决方案1】:

您可以使用Carbon 获取最后一天的时间戳并进行如下查询:

Message::where('added_on', '>', Carbon\Carbon::now()->subDay())->get();

假设您有一个名为 Message 的模型

-- 编辑

因此,请查找 added_on 日期,该日期介于过去与今天最近的日期和今天之间。看起来有点复杂,但确实有效。

Message::whereRaw('added_on between
 (select date(added_on) from messages where added_on < current_date()
  order by added_on desc limit 1) and now()')->get();

-- 编辑

SQLite 3 版本:

Message::whereRaw('added_on between (select date(added_on) from messages 
                   where added_on < current_date order by added_on desc limit 1)
                   and CURRENT_TIMESTAMP')->get();

【讨论】:

  • 数据库中最后一天的消息不一定是昨天,可能是 5 天前或 10 天
  • @MyNick 那么你需要重新格式化你的问题。如果您想获取每个用户的所有最新消息,则可以按日期降序排序并按用户分组。
  • 不,您只需要数据库中最后一天的所有消息。例如,数据库有 2019-02-03 和 2019-02-06 的消息。您需要选择 2019-02-06 的所有消息。而今天 2019-02-09
  • @MyNick 我编辑了我的答案。我在我的一张桌子上测试了结果,它显示了您的期望。希望我能理解您的问题,并希望对您有所帮助。
  • 我收到一个错误:“SQLSTATE[HY000]:一般错误:1 附近”(“:语法错误(SQL:select * from "messages" where added_on between (select date(added_on) from messages其中 added_on
猜你喜欢
  • 1970-01-01
  • 2016-10-06
  • 2016-08-07
  • 1970-01-01
  • 2015-05-07
  • 2016-06-17
  • 2022-01-26
  • 2021-10-06
  • 1970-01-01
相关资源
最近更新 更多