为什么 gorm order paginate 得到空结果?

Why gorm order pagenate got empty result?

我有 2 个表,用户和任务,我想按任务行的顺序获取用户(每个用户拥有的任务数),然后 return 按金额顺序获取用户的结果。

这是我得到的:

err := DB.Table("users").
        Select("users.*, count(tasks.*) as tasks_quantity").
        Joins("JOIN tasks ON tasks.user_addr = users.user_addr").
        Group("users.user_addr, users.id").
        Order("tasks_quantity").Offset(perPage * pageNum).Limit(perPage).Find(&allUsers).
        Error

现在结果总是空的。

我做错了什么?我应该如何正确地实现我的目标?

(我觉得我的顺序也不对,我需要任务数降序排列)

当您使用 group by 时,一些 sql 需要明确枚举您想要分组的字段。我想你的 table users 的字段不仅仅是 id, user_addr 如果这是真的你必须将它添加到 group by 或者只是将你的 select 更改为您想要显示的字段,例如尝试这样的事情。

err := DB.Table("users").
        Select("users.user_addr, users.id, count(tasks.*) as tasks_quantity").
        Joins("JOIN tasks ON tasks.user_addr = users.user_addr").
        Group("users.user_addr, users.id").
        Order("tasks_quantity DESC").Offset(perPage * pageNum).Limit(perPage).Find(&allUsers).
        Error

p.s。对于降序,只需在 Order

中的字段后添加 DESC 运算符