新手求助,gorm遇到一个查询问题,麻烦请各位帮忙看看,谢谢!

wxxul0608 · 2023-12-20 16:15:49 · 1134 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-12-20 16:15:49 的主题,其中的信息可能已经有所发展或是发生改变。

RT.是有这样的有一个需求是,要求我过滤掉几组数据

第一条:name:zhangsan,age:10

第二条:name:lisi,age:19

数据的条数是动态的根据前端传的数据确定

假设数据库是这样的

WX20231220-155434@2x.png

我需要将不等与“name:zhangsan,age:10和name:lisi,age:19”的数据给找出来。

自己写的时候发现不能用where name != zhangsan and age!= 19这种,系统会先过滤掉所有name等于zhangsan的数据再过滤所有age等于19的,但是这样就会把id = 4的那条数据也过滤掉。后面发现可以用where not (name != zhangsan and age!= 19)这种,也就是通过.Not()方法实现,但是条件会有多条。

查询语句也不能放在循环里面,要求不使用from子查询实。我原本想通过map存储多组条件来实现,但是没有成功。现在想请教一下各位怎么通过gorm实现这种过滤查询呢?万分感谢各位!


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1134 次点击  
加入收藏 微博
5 回复  |  直到 2023-12-22 11:33:35
BigBigGopher
BigBigGopher · #1 · 大约1年之前

用in应该可以叭, where name not in ('111','222') and age not in (19 , 10)

wxxul0608
wxxul0608 · #2 · 大约1年之前

之前试过了,不能用not in 。比如这里你name not in ( 'zhangsan' ) age not in ( '10' )。他会过滤掉另外一条name : zhangsan,age:19的这一条。后面发现where not (name = zhangsan and age = 19) 这样可以,但是过滤条件是动态的可能会有很多条,就不知道gorm里面可以怎么使用才能达到要求。

blankt
blankt · #3 · 大约1年之前

用函数把name和age拼接起来,再当做查询条件。

BigBigGopher
BigBigGopher · #4 · 大约1年之前

@wxxul0608 业务代码里自己处理啊,gorm里传个拼好的string就行了

wxxul0608
wxxul0608 · #5 · 大约1年之前

感谢各位,昨天解决了。最后是用这种链式拼接的方法结解决的

    query := Db.Model(&xxxx)
    for _, b := range findNode {
          query = query.Not("xxx = ? and xxx = ?", b.xxx,b.xxx)
    }
    err := query.Debug().Where("xxx = xxxx").Find(&xxx)
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传