go - 选择最新的 N 项按从旧到新排序
问题描述
我正在尝试使用以下实体按创建日期选择最新消息。
type Message struct {
ID uuid.UUID `gorm:"primaryKey;type:uuid;not null" json:"id"`
CreatedAt time.Time `json:"createdAt"`
Content string `json:"content"`
Room *Room `json:"room,omitempty"`
RoomID uuid.UUID `gorm:"type:uuid;not null" json:"-"`
User *User `json:"author,omitempty"`
UserID uuid.UUID `gorm:"type:uuid;not null" json:"-"`
}
我想出了以下查询:
var messages []entity.Message
// get latest 10 items
// newest by date will be at the top
if err := r.db.
Where(&entity.Message{RoomID: room.ID}).
Order("created_at DESC").
Limit(10).
Preload("User").
Find(&messages).Error; err != nil {
return nil, err
}
我们按创建日期降序检索最新的 10 条消息。问题是我需要在那之后颠倒顺序。
我们如何按升序对结果重新排序?(最后一条信息应该在最后)
解决方案
这就是我想出的:
if err := r.db.
Debug().
Table("(?) as m", r.db.Model(&entity.Message{}).Where(&entity.Message{RoomID: room.ID}).Order("created_at DESC").Limit(20)).
Order("created_at ASC").
Preload("User").
Find(&messages).Error; err != nil {
return nil, err
}
产生:
SELECT * FROM (SELECT * FROM "messages" WHERE "messages"."room_id" = '1cf10408-f2b5-4607-8b86-4c0a16ae1fe3' ORDER BY created_at DESC LIMIT 20) as m ORDER BY created_at ASC
推荐阅读
- nuget - Squirrel 中的 NuGet 框架定位
- javascript - 调整窗口大小后移动导航下拉菜单不会消失
- android - 添加回溯在 WebRTC 上不起作用
- regex - 使用正则表达式的 Angular 响应式表单中的模式验证器
- c# - 从控制台应用程序引用时,静态文件不适用于 AspNetCore Web 应用程序
- c# - 如何使用 Chart.js 中的 ChartBar 和 Bootstrap 4 中的警报对齐元素?
- apache-spark - spark 3.0 中的 glob
- java - 如何关闭枚举的反序列化
- reactjs - 在功能组件中反应承诺
- sql-server - Microsoft SQL Server 2016 - 将 varchar 转换为带有 $ 符号和 2 位小数的货币