如何获取 "select 1" 数据
How to get "select 1" data
我试图确定数据库中是否存在某个值,因此我选择使用 Select 1 From table
,但我如何才能获取数据?
我想看看两个人是不是好友,这是我的模型
type Buddy struct {
ID uint64 `gorm:"primarykey"`
UserID uint32
BuddyID uint32
}
这就是 gorm sql 我试过
// select 1 from buddies where user_id=? and buddy_id=?
type Result struct {
Exist uint32
}
exist := &Result{}
orm.DB.Debug().Table("buddies").Raw("SELECT 1 as exist FROM buddies WHERE user_id = ? and buddy_id = ?", userID, buddyID).Scan(exist)
但我在 exist.Exist
中没有得到任何东西
这里有一个函数可以以最佳方式执行您的要求
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
type Buddy struct {
ID uint64 `gorm:"primarykey"`
UserID uint32
BuddyID uint32
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// Migrate the schema
db.AutoMigrate(&Buddy{})
// Create
db.Create(&Buddy{UserID: 1, BuddyID: 2})
db.Create(&Buddy{UserID: 2, BuddyID: 1})
db.Create(&Buddy{UserID: 3, BuddyID: 1})
var exists bool
db.Raw("select case count(1) when 0 then false else true end FROM buddies WHERE user_id = ? and buddy_id = ?", 1, 2).Scan(&exists)
log.Print(exists)
db.Raw("select case count(1) when 0 then false else true end FROM buddies WHERE user_id = ? and buddy_id = ?", 3, 2).Scan(&exists)
log.Print(exists)
}
您可以检查它是否有效
queryResult := db.Where(fmt.Sprintf("user_id = %d and buddy_id = %d", 1, 2).Find(&Buddy)
if queryResult.Error == nil {
//you can also check queryResult.RowsAffected > 0
result = queryResult.Statement.Model //get the returned data
} else {
//do something with queryResult.Error
}
我试图确定数据库中是否存在某个值,因此我选择使用 Select 1 From table
,但我如何才能获取数据?
我想看看两个人是不是好友,这是我的模型
type Buddy struct {
ID uint64 `gorm:"primarykey"`
UserID uint32
BuddyID uint32
}
这就是 gorm sql 我试过
// select 1 from buddies where user_id=? and buddy_id=?
type Result struct {
Exist uint32
}
exist := &Result{}
orm.DB.Debug().Table("buddies").Raw("SELECT 1 as exist FROM buddies WHERE user_id = ? and buddy_id = ?", userID, buddyID).Scan(exist)
但我在 exist.Exist
中没有得到任何东西这里有一个函数可以以最佳方式执行您的要求
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
type Buddy struct {
ID uint64 `gorm:"primarykey"`
UserID uint32
BuddyID uint32
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// Migrate the schema
db.AutoMigrate(&Buddy{})
// Create
db.Create(&Buddy{UserID: 1, BuddyID: 2})
db.Create(&Buddy{UserID: 2, BuddyID: 1})
db.Create(&Buddy{UserID: 3, BuddyID: 1})
var exists bool
db.Raw("select case count(1) when 0 then false else true end FROM buddies WHERE user_id = ? and buddy_id = ?", 1, 2).Scan(&exists)
log.Print(exists)
db.Raw("select case count(1) when 0 then false else true end FROM buddies WHERE user_id = ? and buddy_id = ?", 3, 2).Scan(&exists)
log.Print(exists)
}
您可以检查它是否有效
queryResult := db.Where(fmt.Sprintf("user_id = %d and buddy_id = %d", 1, 2).Find(&Buddy)
if queryResult.Error == nil {
//you can also check queryResult.RowsAffected > 0
result = queryResult.Statement.Model //get the returned data
} else {
//do something with queryResult.Error
}