日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

php小編新一今天為大家介紹GORM的一個(gè)重要功能,即返回結(jié)果列表或按id進(jìn)行分組的結(jié)果圖。GORM是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)訪問(wèn)庫(kù),它提供了豐富的查詢和操作數(shù)據(jù)庫(kù)的方法。通過(guò)使用GORM,我們可以輕松地從數(shù)據(jù)庫(kù)中獲取結(jié)果列表,也可以按照id進(jìn)行分組并返回結(jié)果圖。這個(gè)功能在實(shí)際開(kāi)發(fā)中非常實(shí)用,能夠幫助我們更方便地處理數(shù)據(jù)庫(kù)查詢結(jié)果。接下來(lái),讓我們一起來(lái)了解一下如何使用GORM來(lái)實(shí)現(xiàn)這個(gè)功能吧!

問(wèn)題內(nèi)容

本質(zhì)上,使用 gormdb,我當(dāng)前的代碼看起來(lái)像這樣:

res = []*modelExample

DB.Model(&modelExample{}).
        Order("task_id ").
        Find(res)

登錄后復(fù)制

我對(duì) res 所做的事情是,我將手動(dòng)循環(huán)并將具有相同 task_id 的模型附加到一個(gè)列表中,然后附加要處理的此列表。我需要這樣做的原因是因?yàn)槲倚枰獙?duì)特定列執(zhí)行一些特定操作,我需要提取這些操作,而這些操作在 gorm 中無(wú)法執(zhí)行。

但是,有沒(méi)有一種方法可以更有效地執(zhí)行此操作,讓我像列表的列表一樣返回,然后我可以 for 循環(huán)并對(duì)每個(gè)列表元素執(zhí)行操作?

解決方法

您應(yīng)該能夠使用以下代碼片段來(lái)實(shí)現(xiàn)您的需求:

package main

import (
    "fmt"

    "gorm.io/driver/postgres"
    "gorm.io/gorm"
)

type modelExample struct {
    TaskId int
    Name   string
}

func main() {
    dsn := "host=localhost user=postgres password=postgres dbname=postgres port=5432 sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    db.AutoMigrate(&modelExample{})

    // here you should populate the database with some data

    // querying
    res := make(map[int][]modelExample, 0)
    rows, err := db.Table("model_examples").Select("task_id, name").Rows()
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    // scanning
    for rows.Next() {
        var taskId int
        var name string
        rows.Scan(&taskId, &name)
        if _, isFound := res[taskId]; !isFound {
            res[taskId] = []modelExample{{taskId, name}}
            continue
        }
        res[taskId] = append(res[taskId], modelExample{taskId, name})
    }

    // always good idea to check for errors when scanning
    if err = rows.Err(); err != nil {
        panic(err)
    }

    for _, v := range res {
        fmt.Println(v)
    }
}

登錄后復(fù)制

完成初始設(shè)置后,讓我們仔細(xì)看看查詢部分。
首先,您將從表中獲取所有記錄。您獲取的記錄存儲(chǔ)在 rows 變量中。
for 循環(huán)中,您掃描所有記錄。每條記錄都將添加為新的地圖條目或附加到現(xiàn)有條目(如果 taskid 已存在于地圖中)。
這是根據(jù)特定列創(chuàng)建不同列表的最簡(jiǎn)單方法(例如 taskid)。實(shí)際上,根據(jù)我的理解,您需要拆分記錄,而不是使用聚合函數(shù)將它們分組(例如 countsum 等)。
我添加的其他代碼只是為了清楚起見(jiàn)而添加的。
如果這解決了您的問(wèn)題或者您需要其他東西,請(qǐng)告訴我,謝謝!

分享到:
標(biāo)簽:聚合函數(shù)
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定