猿问

如何使查询参数可选

在 Go 的 Postgres 中,如何使查询参数可选?


在此示例status中是一个可选条件。如果没有status传递,则将从表记录中获取所有行。


如何使查询参数&d.Status成为可选参数


type QueryParams struct {

    Status string `json:"status"`

}


func (r repo) GetRecords(d *QueryParams) ([]*Records, error) {

    statusQuery := ""


    if d.Status != "" {

        statusQuery = " where status = $1 "

    }


    query := "select id, title, status from records " + statusQuery

    rows, err := r.db.Query(query, &d.Status)

}


慕虎7371278
浏览 106回答 2
2回答

神不在的星期二

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

素胚勾勒不出你

您可以使用灵活的WHERE子句,例如SELECT id, title, statusFROM recordsWHERE 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 " + statusQueryrows, err := r.db.Query(query, &d.Status)有时驱动程序无法确定绑定参数的类型$1。通过将其显式转换为text,可以使该语句起作用。
随时随地看视频慕课网APP

相关分类

Go
我要回答