func updateClientAuthData(db *gorm.DB, data []map[uint]string) {
logger.Debug(len(data))
if len(data) < 1 {
return
}
var (
ids string
isBreak bool
peak int = 10
newData []map[uint]string
)
if len(data) >= peak {
isBreak = true
}
buff := bytes.Buffer{}
sql := fmt.Sprintf(`UPDATE rel_client_product SET options = CASE id `)
buff.WriteString(sql)
stop:
for i, v := range data {
for k, v1 := range v {
if ids == "" {
ids = strconv.Itoa(int(k))
}else {
ids = ids + "," + strconv.Itoa(int(k))
}
if i == peak || i == len(data)-1{
buff.WriteString(fmt.Sprintf(`WHEN %d THEN '%s' END `, k, v1))
} else {
buff.WriteString(fmt.Sprintf(`WHEN %d THEN '%s' `, k, v1))
}
if isBreak{
if i >= peak {
newData = append(newData, data[peak+1:]...)
break stop
}
}
}
}
logger.Debug(ids)
args := fmt.Sprintf(`WHERE id IN (%v)`, ids)
buff.WriteString(args)
if err := db.Debug().Exec(buff.String()).Error; err != nil {
logger.Error(err)
return
}
if isBreak{
updateClientAuthData(db, newData)
}
}
golang批量更新mysql数据
最新推荐文章于 2024-03-08 22:18:48 发布