前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang beego orm无限条件查询,多条件查询,不定条件查询,动态多条件查询sql语句,一个字段匹配多值

golang beego orm无限条件查询,多条件查询,不定条件查询,动态多条件查询sql语句,一个字段匹配多值

作者头像
hotqin888
发布2018-12-19 17:27:03
6.2K0
发布2018-12-19 17:27:03
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。

其实我的需求就是:一个树状目录,每个目录下都存有成果,给定某一个上级目录id,分页查询出这个目录下以及子孙目录下的所有成果,要求分页。

这个树状目录比如

projectid1

|

|

——projectid2

      |

      ——projectid3

也就是parentid=projectid1 or parentid=projectid2 or parentid=projectid3……不定数量

给定projectid1,查出所有子孙projectid2和projectid3,循环

开始想着拼接sql语句,看到顶部那个获得灵感,用beego的orm拼接吧

代码语言:javascript
复制
cond := orm.NewCondition()
	cond1 := cond.Or("ProjectId", pid)
	//查出所有子孙项目
	//取到所有子孙pid
	sonproj, _ := GetProjectsbyPid(pid)

	for _, v := range sonproj {
		cond1 = cond1.Or("ProjectId", v.Id)
	}

	cond2 := cond.Or("Code__contains", key).Or("Title__contains", key).Or("Label__contains", key).Or("Principal__contains", key)

	cond3 := cond.AndCond(cond1).AndCond(cond2)
	//(...or...or...)and()
	o := orm.NewOrm()
	qs := o.QueryTable("Product")
	qs = qs.SetCond(cond3)
	//循环这个id下所有项目?
	_, err = qs.Limit(limit, offset).Distinct().OrderBy("-created").All(&prod) 
	if err != nil {
		return prod, err
	}
	return prod, err

经过初步测试,似乎是可以的啊,哈哈。

下面这2者没有测试过,确实涨知识了,感觉下面这些才是正确的方法,我的这个方法太low了。一个字段匹配多值

这个是属于xorm中的:

In(string, …interface{})某字段在一些值中,这里需要注意必须是[]interface{}才可以展开,由于Go语言的限制,[]int64等不可以直接展开,而是通过传递一个slice。示例代码如下:

代码语言:javascript
复制
engine.In("cloumn", 1, 2, 3).Find()
engine.In("column", []int{1, 2, 3}).Find()

 或者beego的sql原生语句查询

使用SQL语句进行查询

  • 使用 Raw SQL 查询,无需使用 ORM 表定义
  • 多数据库,都可直接使用占位符号 ?,自动转换
  • 查询时的参数,支持使用 Model Struct 和 Slice, Array
代码语言:javascript
复制
ids := []int{1, 2, 3}
p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年11月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用SQL语句进行查询
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档