如何获取 "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
    }