【发布时间】:2020-05-20 03:48:14
【问题描述】:
我有一个条件,我想使用 mysql 临时表。
我有 Tasks 表和 Jobs 表。
tasks与jobs有一对多的关系(每个task有一个或多个jobs)
我想选择查询中每个任务的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 临时表:
CREATE TEMPORARY TABLE last_jobs SELECT * from jobs where ...
如果有任何内置函数或类似功能,请使用 laravel elequent 和查询构建器:
Task::select('tasks.*,jobs.*')->join('jobs')->where()
如果有人可以帮助我或提供线索,那将很有帮助。
谢谢。
【问题讨论】:
-
临时表有什么了不起的?
-
在 laravel 查询生成器中进行子查询变得困难。和嵌套块。但是使用临时表我可以避免嵌套并编写更清晰的代码。并让使用查询构建器库变得更容易。
-
所以也许你的问题真的是关于避免子查询。好吧,我认为这是一个错误,因为在这种情况下子查询可能更有效(尽管可能不是这个精确的子查询)
-
当然。避免子查询:)
-
最后我做到了,它工作正常:
DB::statement("CREATE TEMPORARY TABLE last_jobs SELECT jobs.* from jobs join tasks on tasks.id=jobs.task_id and jobs.id=(select id from jobs where jobs.task_id=tasks.id and `jobs`.`deleted_at` is null order by `id` desc limit 1);");和未来:$query = Task::select("tasks.*")->join("last_jobs","tasks.id","last_jobs.task_id");在我的 php 代码中。
标签: mysql laravel eloquent laravel-query-builder