如何使用一个查询从两行获取单个输出/结果

时间:2019-08-31 10:09:18

标签: php laravel

我正试图从数据库中获取价值,但我仍然很不幸将两个查询结合起来以获得一个结果。

场景:

  1. 我想使用employee_id和date获取时间的最小值
  2. 我想使用employee_id和date获取超时的最大值

这可能吗?

我使用的查询

 $data = DB::table('tbl_dtr_logs')
         ->join('tbl_employees_pi','tbl_employees_pi.id','=','tbl_dtr_logs.employee_id')
         ->select('tbl_employees_pi.*')

         ->addSelect(DB::raw('MIN(log_timestamp) as timein'))
         ->where(['log_date'=>$date,'log_type'=>'timein'])

         ->addSelect(DB::raw('MAX(log_timestamp) as timeout FROM tbl_dtr_logs '))
         ->groupBy('log_date','employee_id')->get();

| id |  type  | log_timestamp       | employee_id | log_date |
--------------------------------------------------------------
| 1  | timein | 2019-08-16 06:54:36 |  1          | 2019-08-16
--------------------------------------------------------------
| 2  | timeout| 2019-08-16 09:00:00 |  1          | 2019-08-16
--------------------------------------------------------------
| 3  | timein | 2019-08-16 07:00:36 |  2          | 2019-08-16
--------------------------------------------------------------
| 4  | timeout| 2019-08-16 09:30:00 |  2          | 2019-08-16

结果

Output should like this :

0 => {id: 1,
timein : 2019-08-16 06:54:36 ,
timeout: 2019-08-16 09:00:00 ,
employee_id:  1,
log_date: 2019-08-16},

1 => {id: 1,
timein : 2019-08-16 07:00:36 ,
timeout: 2019-08-16 09:30:00 ,
employee_id:  1,
log_date: 2019-08-16},

任何帮助将不胜感激。在此先感谢:-)

1 个答案:

答案 0 :(得分:1)

您需要按date而不是datetime进行分组。您可以将mysql的{​​{1}} datetime转换为日期。因此,利用date()函数将您的群组更改为此。

db::raw