2 回答

TA贡献1963条经验 获得超6个赞
Query是可变参数,因此您可以构建一个[]interface{}来保存参数:
args := []interface{}{}
然后有条件地构建参数列表:
if d.Status != "" {
statusQuery = " where status = $1 "
args = append(args, &d.Status)
}
运行查询时,使用以下命令展开参数...:
rows, err := r.db.Query(query, args...)

TA贡献1827条经验 获得超9个赞
您可以使用灵活的WHERE子句,例如
SELECT id, title, status
FROM records
WHERE status = $1 OR $1 IS NULL;
这里的逻辑是,如果您为 提供一个值$1,它必须与状态匹配才能返回记录。否则,如果$1被遗漏(即 is NULL),则将返回所有记录。
请注意,要使用 Postgres 驱动程序在 Go 中进行这项工作,您可能需要做一些额外的按摩。在第一次尝试时,我会尝试这样做:
statusQuery = "where status = $1 or $1::text is null"
query := "select id, title, status from records " + statusQuery
rows, err := r.db.Query(query, &d.Status)
有时驱动程序无法确定绑定参数的类型$1。通过将其显式转换为text,可以使该语句起作用。
- 2 回答
- 0 关注
- 105 浏览
添加回答
举报