【问题标题】:Mysql Query in Laravel active recordsLaravel 活动记录中的 Mysql 查询
【发布时间】:2018-08-28 08:39:10
【问题描述】:

在 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 字段,该字段将确定为每小时的操作数。

last activity 是 worker 上一次执行操作的时间。 它将获取当前时间有资格运行的记录。

因此它将以秒为单位确定与60/per_hour 的时间间隔,并选择从last_activity_time 到现在所经过的时间超过此计算间隔的记录。

这行得通,但我想知道两件事。

1:这个查询是解决这个问题的好方法还是速度慢?

2:如何在laravel 5.5 活动记录或查询生成器中执行此查询?而且它应该一次返回一条记录。

提前致谢

【问题讨论】:

    标签: php mysql activerecord laravel-5.5 laravel-query-builder


    【解决方案1】:

    我认为您的查询很好,因为没有连接也没有子查询,只有条件存在。您可以在 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();
    

    【讨论】:

      【解决方案2】:

      这应该可以工作

      \DB::table('workers')->whereRaw(...)->first();  
      

      https://laravel.com/docs/5.6/queries

      1:这个查询是解决这个问题的好方法还是速度慢?

      这取决于你有多少工人,你应该试试看

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-15
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多