gpt4 book ai didi

sql - 如何显示查询结果计数

转载 作者:IT王子 更新时间:2023-10-29 01:56:29 24 4
gpt4 key购买 nike

我正在开发一个 RESTful API 项目,我遇到了一个问题,我的代码可以用 gorm 查询,我的查询是这样的 countSequenceId := db.Debug().Raw("SELECT COUNT (*) FROM SMSBlast2").扫描(&smsblast1)。我的结果是 [1 rows affected or returned],这意味着成功计算了我在数据库中的所有行,但我想显示结果,如 result count = 10,但是如何呢?

Image

 package main

import (
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
"log"
"net/http"
"strconv"
"time"
)

type SMSBlast struct {
SequenceID int `gorm:"primary_key";column:"SequenceID"`
MobilePhone string `gorm:"column:MobilePhone"`
Output string `gorm:"column:Output"`
WillBeSentDate *time.Time `gorm:"column:WillBeSentDate"`
SentDate *time.Time `gorm:"column:SentDate"`
Status *string `gorm:"column:Status"`
DtmUpd time.Time `gorm:"column:DtmUpd"`
}

func (SMSBlast) TableName() string {
return "SMSBlast2"
}

func allSMSBlasts(w http.ResponseWriter, r *http.Request){
db, err := gorm.Open("mssql", "sqlserver://sa:@localhost:1433?database=CONFINS")
if err != nil{
panic("failed to connect database")
}
defer db.Close()

var smsblasts []SMSBlast
db.Debug().Find(&smsblasts)
fmt.Println("{}",smsblasts)

json.NewEncoder(w).Encode(smsblasts)
}

func insertSMSBlast(w http.ResponseWriter, r *http.Request){
fmt.Println("New Insert Created")

db, err := gorm.Open("mssql", "sqlserver://sa:@localhost:1433?database=CONFINS")
if err != nil{
panic("failed to connect database")
}
defer db.Close()

vars := mux.Vars(r)
mobilephone := vars["mobilephone"]
output := vars["output"]

var(
smsblast1 SMSBlast
)


countSequenceId := db.Debug().Raw("SELECT COUNT (*) FROM SMSBlast2").Scan(&smsblast1)
fmt.Println(countSequenceId)


msg, err := json.Marshal(countSequenceId)
if err != nil{
fmt.Println(err.Error())
}



sequenceid1,_ := strconv.Atoi(string(msg))
fmt.Println("SequenceID : " , sequenceid1)

smsblasts := SMSBlast{SequenceID: sequenceid1,MobilePhone: mobilephone,Output:output, DtmUpd: time.Now()}
prindata := db.Create(&smsblasts)
fmt.Println(prindata)

func handleRequests(){
myRouter := mux.NewRouter().StrictSlash(true)
myRouter.HandleFunc("/smsblaststest",allSMSBlasts).Methods("POST")
myRouter.HandleFunc("/smsblaststestInsert/{mobilephone}/{output}", insertSMSBlast).Methods("POST")
log.Fatal(http.ListenAndServe(":8080",myRouter))

}

func main(){
fmt.Println("SMSBLASTS ORM")
handleRequests()
}

最佳答案

我不确定您为什么为此使用 Raw 方法,但我想指出有一个 Count 方法可以实现您想要的:http://gorm.io/docs/query.html#Count

db.Where("name = ?", "jinzhu").Or("name = ?", "jinzhu 2").Find(&users).Count(&count)
//// SELECT * from USERS WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (users)
//// SELECT count(*) FROM users WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (count)

db.Model(&User{}).Where("name = ?", "jinzhu").Count(&count)
//// SELECT count(*) FROM users WHERE name = 'jinzhu'; (count)

我从文档中整理了一个非常简单的示例:

package main

import (
"fmt"

"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)

type Porg struct {
gorm.Model
Name string
}

func main() {
db, err := gorm.Open("sqlite3", "test.db")
if err != nil {
panic("failed to connect database")
}
defer db.Close()

// Migrate the schema
db.AutoMigrate(&Porg{})

// Create
for i := 1; i <= 100; i++ {
db.Create(&Porg{Name: "John"})
}

// Read
var porgs []Porg
var count int
db.Model(&porgs).Count(&count)

fmt.Println(count)
}

输出:100

使用 Model 方法,您可以指定要查询的模型,这不会直接查询数据库。使用 db.Find(&porgs).Count(&count) 实际上会向数据库发送 2 个 SQL 查询。

关于sql - 如何显示查询结果计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com