select 每列的值一行

select a row for each column`s value

我有一个条件,我想使用 mysql 临时 tables.

我有 任务 table 和 工作 table.

tasks 与 jobs 具有一对多关系(每个 task 有一个或多个 jobs)

我想 select 查询中每个任务的 Last Job(基于 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 临时 table:

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

并使用 laravel Elequent 和查询生成器创建它(如果有任何内置函数等):

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

如果有人可以帮助我或提供线索,那将会很有帮助。

谢谢。

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

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');
  }  

}

然后你就可以正常使用视图了table:

DB::table('last_jobs')->select('task_id')->first();