我首先遇到以下问题的问题是该group by子句是在以下情况之前执行的order by:
该saved.recipe_id列是由生成的整数UNIX_TIMESTAMP()
SELECT
saved.recipe_id,
saved.`date`,
user.user_id
FROM saved
JOIN user
ON user.id = saved.user_id
GROUP BY saved.recipe_id
ORDER BY saved.`date` DESC
Run Code Online (Sandbox Code Playgroud)
所以我用子查询和其他bs尝试了各种不同的可能解决方案.最后,我最终在join子句中尝试了一些不同的子查询,这要求我将表顺序从from子句更改为join子句.我决定尝试以下方法:
SELECT
saved.recipe_id,
saved.`date`,
user.user_id
FROM user
JOIN saved
ON user.id = saved.user_id
GROUP BY saved.recipe_id
ORDER BY saved.`date` DESC
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这似乎是正确的顺序,但为什么呢?
这个更改如何使我的查询排序更加正确呢?
真的吗?或者它只是碰巧为我提出的测试案例做了吗?
我正在尝试在 Laravel Eloquent 查询构建器中复制以下 SQL。
select a.name, b.note from projects a
left join (select note, project_id from projectnotes order by created_at desc) as b on (b.project_id = a.id)
where projectphase_id = 10 group by a.id;
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有:
$projects = Project::leftjoin('projectnotes', function($join)
{
$join->on('projectnotes.project_id', '=', 'projects.id');
})
->where('projectphase_id', '=', '10')
->select(array('projects.*', 'projectnotes.note as note'))
->groupBy('projects.id')
->get()
Run Code Online (Sandbox Code Playgroud)
除了获取最新的 projectnotes 之外,它适用于所有事情,它只返回输入到每个项目的 projectnotes 表中的第一个。
我需要通过 'created_at' desc 将订单放入左连接,但我不知道如何实现。
任何帮助将非常感激。