postgresql - 分隔查询位置

标签 postgresql go where-clause go-gorm

我需要分隔 where 以使用条件示例验证值

email := "test@test.com"
if email != "" {
  db.Where("users.email LIKE ?", "%"+email+"%")
}
db.Where("users.name like ?", "%"+jhon+"%").Find(&users)

返回两个查询:

1: SELECT "users".* FROM "users"WHERE users.email LIKE '%test@test.com%'

2: SELECT "users".* FROM "users"WHERE users.name LIKE '%jhon%'

但我只需要一个查询的结果:

 SELECT "users".* FROM "users" WHERE users.email LIKE '%test@test.com%' and users.name LIKE '%jhon%'

谢谢!

最佳答案

我相信这应该有效:

chain := db.Where("users.name like ?", "%"+jhon+"%")
email := "test@test.com"
if email != "" {
  chain = chain.Where("users.email LIKE ?", "%"+email+"%")
}
chain.Find(&users)

所有像 Where 这样的 Gorm 方法都会返回一个可链接的结果。这意味着你可以继续调用它的方法,直到你得到你喜欢的东西。

关于postgresql - 分隔查询位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36188706/

相关文章:

go - 最近复制的文件以字节数组形式返回全0

golang 为 slice slice (二维 slice )中的现有元素赋值

sql - Oracle/general sql - 总是检查所有条件吗?

mysql - 如何在 MYSQL 的 where 子句中使用 Concat?

当我使用包含连字符 (-) 的值进行搜索时,MySQL SELECT 语句不返回任何记录

python - docker-compose stop 从数据库中的表中删除数据

sql - Postgresql - "ERROR: syntax error at or near "-“尝试将数字参数传递给存储过程时

go - golang.org/x/text/message.Print 完成了什么?

mysql - 您如何为 MySQL 和 Postgres 编写不区分大小写的查询?

postgresql - 使用 LIMIT 子句与简单地获取 N 个结果有何不同?