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();
我有一个条件,我想使用 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();