为每一列的值选择一行

时间:2020-02-04 10:24:18

标签: mysql laravel eloquent laravel-query-builder

我有一个条件,我想使用mysql临时表。

我有任务表和工作表。

任务与工作有一对多的关系(每个任务有一个或多个工作)

我要选择查询中每个任务的最后工作(基于created_at列)。

此查询工作正常:

SELECT * 
  FROM tasks t
  join jobs j
    on t.id = j.task_id 
   and j.id = ( select id 
                  from jobs 
                 where jobs.task_id = t.id 
                   and jobs.deleted_at is null 
                 order 
                    by id desc 
                 limit 1
              ) 
 order 
    by j.created_at desc;

但是我想使用更灵活的功能,例如mysql临时表:

CREATE TEMPORARY TABLE last_jobs SELECT * from jobs where ...

并使用laravel elequent和查询生成器进行构建,如果有内置函数之类的话:

Task::select('tasks.*,jobs.*')->join('jobs')->where()

如果有人可以帮助我或提供帮助,这会有所帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在迁移中创建视图,请注意,您应该显式声明每个列名(如果名称不明确,请使用别名)。

countif(timestamp_diff(broker_delivery_date, request_datetime, minute
                      ) >= 30
       )

然后您可以将该视图用作普通表:

class CreateLastJobsView extends Migration {
   public function up() {
    DB::statement("CREATE VIEW last_jobs AS
       SELECT t.id as task_id, j.id as job_id, ...  
       FROM tasks t
       join jobs j
         on t.id = j.task_id 
       and j.id = ( select id 
                  from jobs 
                 where jobs.task_id = t.id 
                   and jobs.deleted_at is null 
                 order 
                    by id desc 
                 limit 1
              ) 
        order by j.created_at desc");
  }

  public function down()  {
    DB::statement('DROP VIEW last_jobs');
  }  

}
相关问题