我在数据库中有一个表,我想从中获取记录,但条件有点复杂。
每隔30分钟,表中会添加三条记录。现在我想要检索记录,但有一小时差异的记录。所以基本上,如果在下午1点添加3条记录,然后在下午1:30添加3条记录,然后在下午2点再添加3条记录,我希望能够获取在下午1点和下午2点添加的记录,但在下午1点30分离开。 / p>
我会提供我的代码,但我使用的是Laravel,我认为不是每个人都能理解Laravel使用的查询构建器Eloquent。
P.S:
public function hours24()
{
$data = new Main();
$temp = $data->order_by('updated_at', 'desc')->first();
$time = strtotime($data->updated_at);
$data = $data->where('updated_at', '>=', date('Y-m-d H:i', strtotime('-1 day')))->where('updated_at', '>=', $time + 3600)->get();
}
上面的问题是我每次都要加3600秒到$ time这是一个固定的时间,所以它只适用于第一行,因为之后每一行技术上都会超过一个小时。似乎没有办法每行增加3600个。
答案 0 :(得分:1)
如果您对在固定时间窗口中插入的记录感兴趣 - 大约在一小时左右,让我们说+/- 5分钟您可以按照
的方式做一些事情。Main::whereRaw('updated_at >= NOW() - INTERVAL 1 DAY')
->where(function ($query) {
$query->whereRaw('MINUTE(updated_at) > 54')
->whereRaw('MINUTE(updated_at) < 6')
})
->get();
转换为以下原始查询
SELECT *
FROM main
WHERE (MINUTE(updated_at) > 54
OR MINUTE(updated_at) < 6)
AND updated_at >= NOW() - INTERVAL 1 DAY
以下是dbfiddle演示