为什么 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
运算符
我有 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
运算符