gpt4 book ai didi

php - 分页之前的多维 groupBy 和 orderBy - Laravel 5

转载 作者:行者123 更新时间:2023-11-28 23:47:44 25 4
gpt4 key购买 nike

我想做的是将具有相同主题的用户撰写的评论分组,并获取最新(最新)的评论。我尝试使用 Comment::where()->orderBy()->groupBy(),但它没有按预期返回数据。

这是我的数据库:

| id | receiver_id | sender_id | title | body | created_at |
| 13 | 2 | 5 | Art | DD | 12.30... |
| 12 | 2 | 5 | Art | CC | 12.20... |
| 11 | 2 | 5 | Art | BB | 12.10... |
| 10 | 2 | 5 | Art | AA | 12.00... |

| 9 | 2 | 3 | Msc | XX | 11.30... |
| 8 | 2 | 3 | Msc | YY | 11.20... |
| 7 | 2 | 3 | Msc | ZZ | 11.10... |

| 6 | 2 | 2 | Foo | UU | 10.40... |
| 5 | 2 | 2 | Foo | II | 10.30... |

| 4 | 2 | 2 | You | QQ | 10.20... |
| 3 | 2 | 2 | You | WW | 10.10... |

| 2 | 2 | 3 | Msc | LL | 10.00... |

| 1 | 2 | 4 | CSS | VV | 10.30... |
| 0 | 2 | 4 | CSS | NN | 10.20... |

我意识到,created_at 和 ids 的顺序相同。因此,我决定使用 id desc,因为我可能无法在 created_at 字符串中安排日期整数。这是我尝试过的:

$comment = Comment::where('receiver_id', Auth::user()->id)
->orderBy('id','desc')
->groupBy('sender_id', 'title')
->paginate(5);
dd($comment);

我想要得到的结果是这样的:

0 => Comment { id = 13, sender_id = 5, title = Art, body = DD } (latest created_at)

1 => Comment { id = 9, sender_id = 3, title = Msc, body = XX }

2 => Comment { id = 6, sender_id = 2, title = Foo, body = UU }

3 => Comment { id = 4, sender_id = 2, title = You, body = QQ }

4 => Comment { id = 1, sender_id = 4, title = CSS, body = VV }

但是这显示的是这样的:

0 => Comment { id = 10, sender_id = 5, title = Art, body = AA }

1 => Comment { id = 5, sender_id = 2, title = Foo, body = II }

2 => Comment { id = 3, sender_id = 2, title = You, body = WW }

3 => Comment { id = 2, sender_id = 3, title = Msc, body = LL }

4 => Comment { id = 0, sender_id = 4, title = CSS, body = NN }

  • 它给出最新的评论但获得最早的评论。

  • 它完全跳过用户 User-3 并显示用户 2 的 2x 主题

  • 然后它在此处显示 User-3,在完成 User2 的 2x 个主题之后而不是在“艺术”之后。

当我在上述查询中删除 ->paginate() 并尝试 ->toSql() 时,我收到:

"select * from `comments` where `receiver_id` = ? group by `title`, `sender_id` order by `id` desc"

我认为 order by id desc 部分是在错误的位置创建的,所以这可能会导致问题。但是,我不确定。

此外,当我交换 ->orderBy()->groupBy 的位置时,例如 ->groupBy() 首先,然后->orderBy(),它返回完全相同的结果。

最后,我尝试替换 ->orderBy('title', 'sender_id'),但结果还是一样。

我做错了什么或错过了什么?提前致谢。

最佳答案

你的问题是关于mysql group by is excuted before order by。

解决方案应该有一个内部连接:

Comment::join(\DB::raw('(select max(id) as id from comments group by sender_id) t'),function($join){
$join->on('comments.id', '=', 't.id');
})->where('comments.receiver_id', Auth::user()->id)
->orderBy('id','desc')
->paginate(5);

类似这里:

MySQL order by before group by

关于php - 分页之前的多维 groupBy 和 orderBy - Laravel 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com