Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How display result count from query

Tags:

sql

go

go-gorm

I'm working on a RESTful API project, and I have problem that my code can query with gorm, my query like this countSequenceId := db.Debug().Raw("SELECT COUNT (*) FROM SMSBlast2").Scan(&smsblast1). I have the result [1 rows affected or returned], that mean success to count my all row in database , but I want to display the result like result count = 10, but how?

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()
}
like image 517
dera ta Avatar asked Feb 16 '19 04:02

dera ta


People also ask

How do I count results in SQL query?

In SQL, you can make a database query and use the COUNT function to get the number of rows for a particular group in the table. Here is the basic syntax: SELECT COUNT(column_name) FROM table_name; COUNT(column_name) will not include NULL values as part of the count.

How do you display query results?

You have the option of displaying your query results on the Run SQL window, as opposed to Data Display windows. To do this, go to View > Data Grid (Ctrl+G). Once you have selected this option, a panel will appear at the bottom of the window - your query results will be displayed there.

How do you count rows of a query result?

To counts all of the rows in a table, whether they contain NULL values or not, use COUNT(*). That form of the COUNT() function basically returns the number of rows in a result set returned by a SELECT statement.

Can we use count in SELECT query?

SQL SELECT statement can be used along with COUNT(*) function to count and display the data values. The COUNT(*) function represents the count of all rows present in the table (including the NULL and NON-NULL values).


1 Answers

I'm not sure why you're using the Raw method for this, but I'd like to point out there's a Count method to achieve what you want: 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)

I put together a very simple example from the docs:

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)
}

Output: 100

Using the Model method you can Specify a model to query, this won't query the DB directly. Using db.Find(&porgs).Count(&count) will actually send 2 SQL queries to the db.

like image 198
Carlos Martinez Avatar answered Oct 23 '22 04:10

Carlos Martinez