【问题标题】:Select TOP 10 data for each day with Laravel query builder使用 Laravel 查询构建器选择每天的 TOP 10 数据
【发布时间】:2017-10-05 07:12:40
【问题描述】:

我在 MySQL 数据库中有一组数据,用于名为“events”的表,时间戳格式为 06/May/2017 20:30:51,位于名为“timestamp”的列中

系统每天都会生成大量数据,但我每天只需要选择 10 个数据。

当前查询是:

$events = DB::table('events')
->select('events.id', 'events.nid', 'events.timestamp')
->orderBy('events.id','desc')
->get();

如何使用查询生成器实现此目的。

进一步说明:

在一组数据库中会有 100 个数据:
15 组数据,日期为 01/May/2017
20 组数据,日期为 02/May/2017
12 组数据,日期为 03/May/2017
30 组数据,日期为 04/May/2017
15 组数据,日期为 05/May/2017
8 组数据,日期为 06/May/2017

我想要实现的是一个将选择的查询:
10 组数据,日期为 2017 年 5 月 1 日(如果有)
10 组数据,日期为 2017 年 5 月 2 日(如果有)
10 组数据,日期为 2017 年 5 月 3 日(如果有)
10 组数据,日期为 2017 年 5 月 4 日(如果有)
10 组数据,日期为 2017 年 5 月 5 日(如果有)
10 组数据,日期为 2017 年 5 月 6 日(如果有)

在单个查询构建器中。

【问题讨论】:

  • 使用 take 是针对整个查询数据。但是我想为整个查询每天只选择 10 个数据
  • ->where('timestamp', '>', 'some-start-date')->where('timestamp', '
  • Ryan Tuosto 感谢您的回复,但这不是我想要的。我已经用进一步的解释编辑了这个问题

标签: php mysql laravel query-builder


【解决方案1】:

试试这样的:

$day_start = strtotime("2017-01-01 00:00:00");
$day_end = strtotime("2017-01-01 24:59:59");

$events = DB::table('events')
   ->select('events.id', 'events.nid', 'events.timestamp')
   ->andWhere('events.timestamp', '>' , $day_start)
   ->andWhere('events.timestamp', '<' , $day_end)
   ->orderBy('events.id','desc')
   ->take(10);

【讨论】:

  • 感谢您的回复,但这不是我想要的。我已经用进一步的解释编辑了这个问题
猜你喜欢
  • 2019-04-25
  • 2012-10-24
  • 2016-09-16
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多