亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在 Golang 中構建動態(條件)WHERE SQL 查詢

在 Golang 中構建動態(條件)WHERE SQL 查詢

Go
皈依舞 2023-04-04 14:46:16
我正在使用 golang、go_reform、PostgreSQL。我想要做的是一個 REST 搜索實用程序,在我遇到條件搜索查詢之前一切都很順利。這里的“有條件”是指我在一個表中有 10 列要搜索,并且可能有很多組合,所以我無法單獨處理它們。我需要的是一個查詢生成器,但我不知道如何在 Go 中實現它?,F在我有這樣的想法,但似乎效率不高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這感覺真的很尷尬,所以我想知道是否有更好的方法來確定進入的字段Find()并基于此構建 SQL 查詢。(實際上它來自 JSON 并綁定到Query結構,所以也許有一種沒有結構的方法)。也可能有 SQL 解決方法,但我認為在沒有所有可能列的情況下構建查詢會更有效。編輯:順便說一句,為了讓我的谷歌搜索查詢更準確,我發現了一堆與我的問題相關的東西,可能我現在會嘗試使用它。對于那些也感興趣的人: old go playground example對 MySQL 數據庫進行動態 SQL 查詢gorp 包(片段聽起來很有前途)
查看完整描述

3 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超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


}



查看完整回答
反對 回復 2023-04-04
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

在 orm 中GORM,我們這樣做

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

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


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

TA貢獻1829條經驗 獲得超6個贊

在 PostgreSQL 中

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

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

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


查看完整回答
反對 回復 2023-04-04
  • 3 回答
  • 0 關注
  • 413 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號