gpt4 book ai didi

sql - Go语言单数据库查询寻址多参数

转载 作者:IT王子 更新时间:2023-10-29 02:17:16 25 4
gpt4 key购买 nike

我正在构建一个 Rest API,格式为 query/{occupation}/{location}

现在,在 .go 文件中,我有

position := params["occupation"]
loc := params["location"]
rows, err := db.Query(`SELECT occupation, location
FROM myTable WHERE occupation=$1 AND location=$2`,
position, loc);

如果我们在同时存在职业和位置的情况下调用我的 API,这会非常有效。我希望它更灵活,以便我可以忽略一些参数,例如,我想调用 abc.com/query/dentist/NULL

然后我可以得到这个代码:

if loc == nil && position == nil {
rows, err = db.Query(`SELECT occupation, location
FROM myTable);
} else if loc == nil {
rows, err = db.Query(`SELECT occupation, location
FROM myTable WHERE occupation=$1`, position);
} else if position = nil {
rows, err = db.Query(`SELECT occupation, location
FROM myTable WHERE location=$1`, loc);
} else {
rows, err := db.Query(`SELECT occupation, location
FROM myTable WHERE occupation=$1 AND location=$2`,
position, loc);
}

但这是不可持续的,因为我的 RestAPI 可能支持 10 个参数,而 if else 子句将增长到 2^10。

我想知道只使用一个查询来解决所有情况。

这可能是一个简单的 SQL 问题,我就是想不通(我正在使用 postgres)。

最佳答案

这实际上是一个基本的变量检查,您不需要执行所有 3 个查询,例如:

var (
rows *sql.Rows
err error
position = params["occupation"]
loc = params["location"]
)
switch {
case loc != "" && position != "":
rows, err = db.Query(`SELECT occupation, location FROM myTable WHERE occupation=$1 AND location=$2'`, position, loc)
case loc != "":
rows, err = db.Query(`SELECT occupation, location FROM myTable WHERE location=$1`, loc)
case position != "":
rows, err = db.Query(`SELECT occupation, location FROM myTable WHERE occupation=$1`, position)
default:
rows, err = db.Query(`SELECT occupation, location FROM myTable`)
}
if err != nil {
panic(err)
}

关于sql - Go语言单数据库查询寻址多参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102283/

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