【发布时间】:2021-10-01 14:39:20
【问题描述】:
我有一个包含 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 查询吗?戈姆是一名司机,并不固执己见。我相信如果你不能缓存输入,你将不得不运行 3 个 SQL 更新。
-
输入长度 >0 是一个字段的输入吗?您处理该字段以创建另外 3 个值?这里的 Json 结构是什么?你也可以添加吗
-
@ShaileshSuryawanshi 我是 Golang 新手,目前,我正在通过 Postman 将这些值以 JSON 格式发送到后端(Golang)。
-
@ShaileshSuryawanshi 更新了问题的详细信息。
-
UPDATE table_name SET B = json.B, C = json.C WHERE A = json.A;这个 SQL 查询可以工作吗?如果是这种情况,您是否需要帮助为 Gorm 构建此 sql 查询? gorm.io/docs/update.html此文档可能会有所帮助