



























一、 从MySQL数据库中随机选取数据,可以使用 SQL 的 ORDER BY RAND() 语句来实现。具体步骤如下:
type User struct {
Id int64
Name string
Age int
}
Engine 实例engine, err := xorm.NewEngine("mysql", "root:password@/database?charset=utf8")
if err != nil {
Desc() 方法设置随机排序,然后使用 Limit() 方法限制返回的数据条数var users []User
err = engine.OrderBy("rand() desc").Limit(10, 0).Find(&users)
if err != nil {
上面的代码会从数据库中随机选取 10 条 User 记录,并存储在 users 切片中。
完整代码示例:

1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/go-xorm/xorm" 7 _ "github.com/go-sql-driver/mysql" // 导入 MySQL 驱动 8 ) 9 10 type User struct { 11 Id int64 12 Name string 13 Age int 14 } 15 16 func main() { 17 engine, err := xorm.NewEngine("mysql", "root:password@/database?charset=utf8") 18 if err != nil { 19 fmt.Println(err) 20 return 21 } 22 23 var users []User 24 err = engine.OrderBy("rand() desc").Limit(10, 0).Find(&users) 25 if err != nil { 26 fmt.Println(err) 27 return 28 } 29 30 for _, user := range users { 31 fmt.Printf("Id: %d, Name: %s, Age: %d\n", user.Id, user.Name, user.Age) 32 } 33 }
View Code
二、在 PostgreSQL 中也可以使用类似的方法从数据库中随机选取数据。PostgreSQL 提供了 random() 函数来生成随机数,可以结合 ORDER BY 子句实现随机排序。
type User struct {
Id int64
Name string
Age int
}
Engine 实例engine, err := xorm.NewEngine("postgres", "user=postgres password=mypassword dbname=mydb sslmode=disable")
if err != nil {
Desc() 方法设置随机排序,然后使用 Limit() 方法限制返回的数据条数var users []User
err = engine.OrderBy("random() desc").Limit(10, 0).Find(&users)
if err != nil {
上面的代码会从 PostgreSQL 数据库中随机选取 10 条 User 记录,并存储在 users 切片中。
完整代码示例:

1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/go-xorm/xorm" 7 _ "github.com/lib/pq" // 导入 PostgreSQL 驱动 8 ) 9 10 type User struct { 11 Id int64 12 Name string 13 Age int 14 } 15 16 func main() { 17 engine, err := xorm.NewEngine("postgres", "user=postgres password=mypassword dbname=mydb sslmode=disable") 18 if err != nil { 19 fmt.Println(err) 20 return 21 } 22 23 var users []User 24 err = engine.OrderBy("random() desc").Limit(10, 0).Find(&users) 25 if err != nil { 26 fmt.Println(err) 27 return 28 } 29 30 for _, user := range users { 31 fmt.Printf("Id: %d, Name: %s, Age: %d\n", user.Id, user.Name, user.Age) 32 } 33 }
View Code
三、Microsoft SQL Server
在 SQL Server 中,可以使用 NEWID() 函数生成一个唯一的 GUID 值,然后根据这个 GUID 值进行排序,从而实现随机排序的效果。
var users []User
err = engine.OrderBy("NEWID() desc").Limit(10, 0).Find(&users)
if err != nil {
四、Oracle
在 Oracle 中,可以使用 DBMS_RANDOM.RANDOM 函数生成一个随机数,然后根据这个随机数进行排序,从而实现随机排序的效果。
var users []User
err = engine.Desc("DBMS_RANDOM.RANDOM").Limit(10, 0).Find(&users)
if err != nil {
需要注意的是,在 Oracle 中,DBMS_RANDOM.RANDOM 函数需要在查询语句中使用,而不能直接在 Go 代码中使用。因此,需要先构建一个原生的 SQL 查询语句,然后使用 engine.SQL() 方法执行该查询语句。
sql := "SELECT * FROM users ORDER BY DBMS_RANDOM.RANDOM FETCH FIRST 10 ROWS ONLY"
var users []User
err = engine.SQL(sql).Find(&users)
if err != nil {
// 处理错误
}
在上面的示例代码中,FETCH FIRST 10 ROWS ONLY 用于限制返回的记录数量为 10 条。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。