【问题标题】:GroupBy after orderBy for complicated query in Laravel在 Laravel 中进行复杂查询的 orderBy 之后的 GroupBy
【发布时间】:2016-12-27 10:00:16
【问题描述】:

这是我为每个聊天获取消息并将它们分组的代码

$query = DB::table('chats');

    $otherUserId= $request->input('loadId');
    if($otherUserId==0){
        $query->join('users as u1', 'u1.id', '=', 'chats.user1_id');
        $query->join('users as u2', 'u2.id', '=', 'chats.user2_id');
        $query->join('messages', 'messages.chat_id', '=', 'chats.id');
        $query->where('chats.user1_id', '=', '{$userId}');
        $query->orWhere('chats.user2_id', '=', '{$userId}');
        $query->select('messages.chat_id', 'messages.from_id', 'u1.id as    user1_id', 'u2.id as user2_id', 'messages.created_at', 'messages.body', 'messages.read', 'u1.name as user1_name', 'u2.name as user2_name', 'u1.picture_url as user1_pic', 'u2.picture_url as user2_pic');

        $query->orderBy('messages.created_at ', 'DESC');
        $query->groupBy('chat_id');
        $messages = $query->paginate(4);

当我运行查询时,结果并不像预期的那样,OrderBy 出现在 group by 之后。我已经尝试了很多,但找不到和解决方案。我也尝试了这个解决方案,但无法使其工作。 Order By before Group By using Eloquent (Laravel)

请帮帮我,我已经浪费了很多时间来解决这个问题。提前感谢您帮助我。

【问题讨论】:

    标签: php mysql database laravel laravel-5.2


    【解决方案1】:

    分页前一行添加以下代码

    dd($query->toSql());
    

    这将返回查询字符串以调试 mysql 查询。 如果您仍然无法找出发生了什么,请将其粘贴到此处以帮助您。

    【讨论】:

      【解决方案2】:

      这是因为将 GROUP BY 子句放在 ORDER BY 之后是不合法的语法 - 请注意文档中的正式定义。 http://dev.mysql.com/doc/refman/5.7/en/select.html

      目前尚不清楚您实际上想通过此实现什么 - SQL 对聚合内的有序数据没有特别好的支持。

      【讨论】:

      • 感谢@Sam Dufel,我不知道 Group byorder By 之后是不合法的。但是我需要做的是获取每个聊天的 1 条最新消息(有很多消息与一个聊天相关),你能建议任何解决方案吗?再次感谢您的帮助。
      【解决方案3】:

      感谢大家帮助我。 最后我解决了它,我从另一个帖子https://stackoverflow.com/a/7745635/6279602 的这个答案中得到了帮助,它适用于连接而不是 group by,因为 group by 不支持排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 2014-10-21
        • 1970-01-01
        • 2016-05-11
        • 2018-10-23
        相关资源
        最近更新 更多