Mysql Query в Laravel активные записи - PullRequest
0 голосов
/ 28 августа 2018

после небольшого поиска в 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 активных записях или построителе запросов? а также он должен возвращать одну запись за раз.

заранее спасибо

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я думаю, что ваш запрос в порядке, потому что не было никаких соединений и никаких подзапросов, только условие. Вы можете запускать необработанные запросы на 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();
0 голосов
/ 28 августа 2018

это должно работать

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

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

1: этот запрос - хороший подход к этой проблеме или он медленный?

Это будет зависеть от того, сколько у вас работников, вы должны попробовать и посмотреть

...