第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Golang 中構(gòu)建動態(tài)(條件)WHERE SQL 查詢

在 Golang 中構(gòu)建動態(tài)(條件)WHERE SQL 查詢

Go
皈依舞 2023-04-04 14:46:16
我正在使用 golang、go_reform、PostgreSQL。我想要做的是一個 REST 搜索實(shí)用程序,在我遇到條件搜索查詢之前一切都很順利。這里的“有條件”是指我在一個表中有 10 列要搜索,并且可能有很多組合,所以我無法單獨(dú)處理它們。我需要的是一個查詢生成器,但我不知道如何在 Go 中實(shí)現(xiàn)它。現(xiàn)在我有這樣的想法,但似乎效率不高type Query struct {    Id               *int64    FirstName        *string    MiddleName       *string    LastName         *string    AreaId           *int64    Birthday         *time.Time}func (table *Query) Find() (*User) {    if table.Id != nil {        idstr := fmt.Sprintf("WHERE Id = %d AND ", table.Id)    }    else idstr := "WHERE "    }    if table.FirstName != "" {        firststr := fmt.Sprintf("FirstName = %s AND", table.FirstName)    }    else firststr := ""}//and so on這感覺真的很尷尬,所以我想知道是否有更好的方法來確定進(jìn)入的字段Find()并基于此構(gòu)建 SQL 查詢。(實(shí)際上它來自 JSON 并綁定到Query結(jié)構(gòu),所以也許有一種沒有結(jié)構(gòu)的方法)。也可能有 SQL 解決方法,但我認(rèn)為在沒有所有可能列的情況下構(gòu)建查詢會更有效。編輯:順便說一句,為了讓我的谷歌搜索查詢更準(zhǔn)確,我發(fā)現(xiàn)了一堆與我的問題相關(guān)的東西,可能我現(xiàn)在會嘗試使用它。對于那些也感興趣的人: old go playground example對 MySQL 數(shù)據(jù)庫進(jìn)行動態(tài) SQL 查詢gorp 包(片段聽起來很有前途)
查看完整描述

3 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個贊

最終得到的解決方案

控制器

func Find(c echo.Context) (err error) {

model := &models.Query{}

if err = c.Bind(model); err != nil {

? ? return c.JSON(http.StatusInternalServerError, u.Message(false, "Bad request"))

}

resp := model.Find()

return c.JSON(http.StatusOK, resp)

模型


type Query map[string]interface{}


func (model Query) Find() (Query) {

? ? var values []interface{}

? ? var where []string

? ? for k, v := range model {

? ? ? ? values = append(values, v)

? ? ? ? //MySQL Way: where = append(where, fmt.Sprintf("%s = ?", k))

? ? ? ? where = append(where, fmt.Sprintf(`"%s" = %s`,k, "$" + strconv.Itoa(len(values))))

? ? }

? ? string := ("SELECT name FROM users WHERE " + strings.Join(where, " AND "))

? ? //for testing purposes i didn't ran actual query, just print it in the console and returned JSON back

? ? fmt.Println(string)

? ? return model


}



查看完整回答
反對 回復(fù) 2023-04-04
?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊

在 orm 中GORM,我們這樣做

if con1 {
    db.Where("con1 =?", con1Flag)
}

如果是你自己寫的orm,我建議改成gorm?;蛘吣憧梢詤⒖寄阏谑褂玫膐rm,是否和上面的代碼有相同的用法。如果您自己編寫代碼,請隨心所欲。如果你在團(tuán)隊(duì)中工作,我想使用成熟的 orm 會更好


查看完整回答
反對 回復(fù) 2023-04-04
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個贊

在 PostgreSQL 中

查詢(字符串 sql,參數(shù)...)

在這里,當(dāng)我以 Query(string,values) 的形式將值傳遞給 Query 時,它拋出一個錯誤,只添加了一個值,預(yù)期應(yīng)該是 2,接口數(shù)組應(yīng)該如何作為參數(shù)傳遞給 Query

我找到了答案:您需要將其作為 Query(string, values...)


查看完整回答
反對 回復(fù) 2023-04-04
  • 3 回答
  • 0 關(guān)注
  • 374 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號