簡體   English   中英

如何將多個更新 GORM MySql 查詢合並為 1?

[英]How to combine multiple update GORM MySql queries into 1?

我有一個包含 4 列的 MySQL 表

(A(primary key, int), B(string), C(string), D(string)).

我想使用 A 運行更新查詢查找行,我可以在其中更新 1、2 或所有 3 列(B、C、D)的數據。 我從前端以 JSON 格式獲取數據。 目前,我正在檢查我輸入的字符串的長度,如果它們 > 0,我會一一更新這些列。 所以在最壞的情況下,我將運行 3 個 SQL 更新。 有沒有辦法在使用 GORM 和 Golang 的 1 個 SQL 查詢中做到這一點?

Example JSON structure
{
A: 23,
B: "word1",
D: "word2"
}

在這種情況下,我只想更新 B 列和 D 列。

我將使用 Golang 結構對其進行解組,該結構的形式為

type rating struct{
    A int,
    B string,
    C string,
    D string
        }

所以在 Golang 中 C 的值將是一個空字符串。

var rating_var rating
if len(rating_var.B)>0{
       db.Model(&ratings).where("A=?",rating_var.A).Update(map[struct]interface{}{"B": rating_var.B})
        }

if len(rating_var.C)>0{
       db.Model(&ratings).where("A=?",rating_var.A).Update(map[struct]interface{}{"C": rating_var.C})
        }

if len(rating_var.D)>0{
       db.Model(&ratings).where("A=?",rating_var.A).Update(map[struct]interface{}{"D": rating_var.D})
        }

有沒有辦法在使用 GORM 和 Golang 的 1 個 SQL 查詢中做到這一點?

我建議先根據你的條件建立一個模型。 使用該模型僅運行一個 SQL 查詢。 此處查看操場上的完整示例。

請注意,gorm 會處理一些缺失的字段。 現在如果rating.C為空,gorm 將不會更新記錄中c column的值。

        rating := Rating{
                A: 1,
                B: "b1",
                D: "d2",
        }

        var toUpdate RatingModel
        if len(rating.B) > 0 {
                toUpdate.B = rating.B
        }

        if len(rating.C) > 0 {
                toUpdate.C = rating.C
        }

        if len(rating.D) > 0 {
                toUpdate.D = rating.D
        }
        db.Model(&toUpdate).Where("A=?", rating.A).Updates(toUpdate)

我建議在地圖上使用結構。 Go 是強類型語言,因此使用結構體更符合習慣。

您可以使用Updates來更新多個字段。

db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false})

db.Model(&ratings).where("A=?",rating_var.A).Updates(map[struct]interface{}{"B": rating_var.B, "C": rating_var.C})

更新

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM