在stackoverflow中进行了一些搜索之后,我想到了这个查询,它像这样:
SELECT * FROM workers where TIMESTAMPDIFF(SECOND, last_activity_time, NOW()) >= (60/per_hour*60)
每个记录都包含以下字段:
id worker_name last_activity_time per_hour
因此每个工人都有一个per_hour字段,该字段将确定为每小时的操作次数。
上次活动是工作人员最后一次执行操作的时间。 它将获得有资格在当前时间运行的记录。
因此它将确定以60/per_hour
为单位的时间间隔(以秒为单位),并选择从其last_activity_time
到现在为止的时间超过此计算间隔的记录。
这可以,但是我想知道两件事。
1:此查询是解决此问题的好方法还是速度慢?
2:如何在laravel 5.5
活动记录或查询生成器中执行此查询?并且应该一次返回一条记录。
预先感谢
答案 0 :(得分:0)
这应该有效
\DB::table('workers')->whereRaw(...)->first();
https://laravel.com/docs/5.6/queries
1:此查询是解决此问题的好方法还是它的速度慢?
这取决于您有多少工人,您应该尝试看看
答案 1 :(得分:0)
我认为您的查询很好,因为没有联接,也没有子查询,仅存在条件。您可以在laravel上触发原始查询,以-
$workers = DB::select('SELECT * FROM workers where TIMESTAMPDIFF(SECOND, last_activity_time, NOW()) >= (60/per_hour*60)');
// or you can make use of query builder as follows
$workers = DB::table('workers')->whereRaw('TIMESTAMPDIFF(SECOND, last_activity_time, NOW()) >= (60/per_hour*60')->first();