Golang gorm order 排序问题

17 min read

如查询”按照created_at升序第一个创建的User“

正确的写法:

db.Model(&models.User{}).Order("created_at ASC").Limit(1).Find(&s)

sql:

SELECT * FROM "users" ORDER BY created_at ASC LIMIT 1

错误写法:

db.Model(&models.User{}).Order("created_at ASC").First(&s)

这样写会自动加上主键的排序,生成的sql,虽然说结果应该都没什么差别,但是和预期的sql并不一样:

SELECT * FROM "users" ORDER BY created_at ASC, "users"."id" ASC LIMIT 1

错误写法:

这样写,直接和想要的sql意图相反,变成”最后一个创建的User“,且自动加上了主键的排序

db.Model(&models.User{}).Order("created_at DESC").Last(&s)

sql:

SELECT * FROM "users" ORDER BY created_at DESC, "users"."id" DESC LIMIT 1