相关疑难解决方法(0)

JOIN,GROUP BY,ORDER BY

我首先遇到以下问题的问题是该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)

出于某种原因,这似乎是正确的顺序,但为什么呢?
这个更改如何使我的查询排序更加正确呢?
真的吗?或者它只是碰巧为我提出的测试案例做了吗?

mysql sql join group-by sql-order-by

4
推荐指数
1
解决办法
1万
查看次数

左连接的 Laravel 排序结果

我正在尝试在 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 将订单放入左连接,但我不知道如何实现。

任何帮助将非常感激。

sql-order-by left-join laravel eloquent

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

sql-order-by ×2

eloquent ×1

group-by ×1

join ×1

laravel ×1

left-join ×1

mysql ×1

sql ×1