【问题标题】:Filter SQL database query by timestamp, backend in PHP using Laravel按时间戳过滤 SQL 数据库查询,使用 Laravel 在 PHP 中进行后端
【发布时间】:2016-11-14 22:21:36
【问题描述】:

所以我正在尝试从我的后端(使用 Laravel 用 php 编写)构建对我的 SQL 数据库的查询。我的数据库中有一个表,其中有一列名为“created_at”,带有“timestamp”类型的值。我想要做的是,当我向我的数据库发送查询时,只选择从当前日期起 30 天或更短时间创建的表的行(或实例,我猜)。我已经尝试过使用“where”关键字来回试验,但我无法让它按我的意愿工作。

当我浏览数据库中的表格时,日期以“YYYY-MM-DD hh:mm:ss”格式写入,但我不知道当它们采用这种格式时如何比较它们,并且我不知道如何在进行查询时转换它们。我查看了 Laravel 中的 whereBetween() 方法,但我没有让它起作用,因为我不知道如何比较它们。

目前我的查询如下所示:

$topUser = DB::table('statistics')
            ->join('users', 'statistics.user_id', '=', 'users.id', 'inner')
            ->select('fname', 'user_id', DB::raw('sum(price) as total_collection'))
            ->groupBy('user_id')
            ->orderBy('total_collection','desc')
            ->get();

我想要做的,在伪代码中,是这样的;

->where 'created_at' <= 30 days ago

提前致谢!

【问题讨论】:

  • WHERE("created_at", "&lt;=", DB::raw("NOW() - INTERVAL 30 DAY"))?

标签: php sql-server database laravel timestamp


【解决方案1】:

基本上就是这么简单。

->whereDate('created_at', '<=', \Carbon\Carbon::now()->subDays(30));

【讨论】:

  • 没用过Carbon,那个插件需要下载什么的吧?非常感谢您的回答!
  • @NyfikenGul Carbon 默认自带 Laravel。 Laravel 在内部将它用于很多日期逻辑。
  • 啊,我明白了!太好了,到时候研究一下
  • 我在那里也遇到了完整性约束违规问题 - 是否还有其他需要修复的问题..?它说“列'created_in' where 子句不明确......”
  • @NyfikenGul 那是因为你的加入。多个联接表具有created_at 列。试试users.created_at 而不是created_at。
【解决方案2】:

你可以通过DB::raw来利用mysql的日期函数

->where('created_at', '<=', DB::raw("DATE_SUB(CURDATE(),INTERVAL 30 DAY)")

【讨论】:

  • 如果可能,最好避免使用DB::raw。它倾向于将您的代码锁定到单个数据库引擎。
  • 会试试的!谢谢小伙子!
  • @ceejayoz 您可以使用DB::raw 并同时符合 SQL 标准(但此查询不适用)。
  • 现在我得到一个 Integrity Constant Violation(我基本上只是将它粘贴到我的代码中,还有什么需要添加的吗?呵呵)
  • @ceejayoz 我只使用过 mysql,所以我什至没有想到这一点。我会记住这一点的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 2013-10-27
  • 2021-07-09
  • 2011-04-20
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多