gpt4 book ai didi

带有where in子句的mysql查询中的golang slice

转载 作者:IT王子 更新时间:2023-10-29 00:49:24 25 4
gpt4 key购买 nike

我正在运行下面的查询,但只得到第一个 id 值:-

select * from `table` where table`.`id` in ('1', '2', '3', '4', '5', '6', '7', '9', '11', '13', '14', '15', '17') and `table`.`deleted_at` is null

我做了以下事情:-

var aID = make([]string, 0)
var in India // india is struct

for rows.Next() {
cook := rows.Scan(&in.ID)

aID = append(aID, strconv.Itoa(in.ID))
}

asID = strings.Join(aID, ",")

anotherRow,err := db.Query("SELECT * from table2 where id in (?)", asID)
if err != nil { fmt.Printf("Error: ", err) }
// ... Other line follows up with "for anotherRow.Next() and fetching"

在获取数据时,它只返回值“1”并忽略传递给它的所有其他 ID,即 '2'、'3'、'4'、'5'、'6'、' 7'、'9'、'11'、'13'、'14'、'15'、'17'

如何正确传递?

我正在使用 go-sql-driver/mysql

常见问题:

  1. aID 确实包含所有这些数字作为字符串和

  2. 表格包含上面提供的 id 的所有可用行。

  3. table 是从那里获取 id 并附加到 aID 和另一 strip 有 id 的记录存储在 aID 中的是使用 in 语句从 table2 中获取的。

谢谢

最佳答案

你可以这样做:

args := make([]interface{}, len(asID))
for i, id := range asID {
args[i] = id
}
stmt := `SELECT * from table2 where id in (?` + strings.Repeat(",?", len(args)-1) + `)`
anotherRow, err := db.Query(stmt, args...)

请注意,如果 asID 可以有 len == 0,您将需要设置一个守卫。

如果您要传入任何其他参数,则必须将它们添加到 args slice 中。

另外请注意,您应该明确命名所需的列,这样您就可以保证在正确的列中扫描到正确的字段。

关于带有where in子句的mysql查询中的golang slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com