惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
S
Securelist
V
Vulnerabilities – Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
Schneier on Security
Schneier on Security
Cyberwarzone
Cyberwarzone
Simon Willison's Weblog
Simon Willison's Weblog
Hacker News - Newest:
Hacker News - Newest: "LLM"
P
Palo Alto Networks Blog
T
Troy Hunt's Blog
SecWiki News
SecWiki News
Security Archives - TechRepublic
Security Archives - TechRepublic
T
The Blog of Author Tim Ferriss
Project Zero
Project Zero
Microsoft Security Blog
Microsoft Security Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
F
Full Disclosure
阮一峰的网络日志
阮一峰的网络日志
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Know Your Adversary
Know Your Adversary
WordPress大学
WordPress大学
PCI Perspectives
PCI Perspectives
N
News | PayPal Newsroom
The Last Watchdog
The Last Watchdog
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
V
Visual Studio Blog
C
CERT Recently Published Vulnerability Notes
H
Help Net Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
云风的 BLOG
云风的 BLOG
月光博客
月光博客
T
The Exploit Database - CXSecurity.com
I
InfoQ
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
腾讯CDC
小众软件
小众软件
V2EX - 技术
V2EX - 技术
罗磊的独立博客
Cloudbric
Cloudbric
Recorded Future
Recorded Future
IT之家
IT之家
Google DeepMind News
Google DeepMind News
C
CXSECURITY Database RSS Feed - CXSecurity.com

博客园 - 柒零壹

Ubuntu 24.04 安装最新版podman@5.6.1 [转贴]在前端如何玩转 Word 文档 一个命令行参数解决open-webui镜像启动失败的问题(huggingface网站访问失败问题) Go Template 常用疑难知识点 go-ElasticSearch TypedClient学习笔记 golang用pgx查询数据时如何将查询结果方便的放入Map中 go语言如何使用elastic官方客户端go-elasticsearch/v8实现数据批量更新 【转】网络常用颜文字(文字表情) GoCV下实现多图片单窗口内同时显示 解决GoCV/OpenCV不支持中文的问题 golang中xorm自动维护表结构自动导入数据的实现 [golang] gin的中间中调用Abort方法导致的带附件的表单提交时,浏览器报net::ERR_CONNECTION_RESET错误的原因及解决方法 [golang]filepath.Glob的缺陷,不支持多级目录 浏览器中javascript简易实现json数据保存到客户端 最简单搭建前端轻量级项目开发服务 [转]Three.js做一个酷炫的城市展示可视化大屏 [转]css实现不同样式的tooltip对话框小三角 [原]升级项目到Rails7.0.3,使用自己手动方案编译打包css及js资源 puma web server如何监听所有IP地址
从数据库中随机选取数据(基于golang,xorm)
柒零壹 · 2024-03-08 · via 博客园 - 柒零壹

一、 从MySQL数据库中随机选取数据,可以使用 SQL 的 ORDER BY RAND() 语句来实现。具体步骤如下:

  1. 定义一个结构体用于存储数据
type User struct {
    Id   int64
    Name string
    Age  int
}
  1. 建立与数据库的连接,并获取一个 Engine 实例
engine, err := xorm.NewEngine("mysql", "root:password@/database?charset=utf8")
if err != nil {
    
  1. 使用 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 子句实现随机排序。

  1. 定义一个结构体用于存储数据
type User struct {
    Id   int64
    Name string
    Age  int
}
  1. 建立与 PostgreSQL 数据库的连接,并获取一个 Engine 实例
engine, err := xorm.NewEngine("postgres", "user=postgres password=mypassword dbname=mydb sslmode=disable")
if err != nil {
    
  1. 使用 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 条。