Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >golang beego orm无限条件查询,多条件查询,不定条件查询,动态多条件查询sql语句,一个字段匹配多值

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

作者头像
hotqin888
发布于 2018-12-19 09:27:03
发布于 2018-12-19 09:27:03
6.4K00
代码可运行
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏
运行总次数:0
代码可运行

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

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

这个树状目录比如

projectid1

|

|

——projectid2

      |

      ——projectid3

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
ids := []int{1, 2, 3}
p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Beego Models之二对象的 CRUD 操作高级查询
对 object 操作的四个方法 Read / Insert / Update / Delete
若与
2018/08/03
4.6K0
Beego Models之二对象的 CRUD 操作高级查询
Golang 语言 Web 框架 beego v2 之读操作
beego v2.x 和 beego v1.x 在 ORM 上的区别是,beego v2.x 的 ORM 对象被设计为无状态的,它是线程安全的,建议大家在使用时,一个数据库只对应一个 ORM 对象。
frank.
2020/12/08
1.1K0
beego利用casbin进行权限管理——第三节 策略查询
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/78992250
hotqin888
2018/09/11
1.5K0
beego利用casbin进行权限管理——第三节 策略查询
Beego models之三使用SQL语句进行查询构造查询
在实际生产中,各种业务逻辑,model不能很好的满足需求,所以就可以使用原生的sql。当然,如果你对sql比较熟悉,你会发现orm有时候没有原生sql来的灵活,下面介绍beego的原生sql。
若与
2018/08/03
2.9K0
Beego models之三使用SQL语句进行查询构造查询
Go实战项目-Beego的orm的基本使用
beego的使用三部曲: 1、在controllers里面创建控制器 2、在module里面创建数据模型 3、在router设置路由控制 对于beego的orm使用有很多种方式,我们主要采用过滤器的方式来实现。因为前面说过,严禁使用原生的sql语句。
用户6680840
2022/06/08
1.3K0
beego利用casbin进行权限管理——第五节 策略更新(续)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/80092285
hotqin888
2018/09/11
1.1K0
beego利用casbin进行权限管理——第五节 策略更新(续)
从零开始创建一个基于Go语言的web service
20个小时的时间能干什么?也许浑浑噩噩就过去了,也许能看一些书、做一些工作、读几篇博客、再写个一两篇博客,等等。而黑客马拉松(HackAthon),其实是一种自我挑战--看看自己在有限的短时间内究竟能做出些什么。比如:让一个毫无某种语言经验的人用该种语言去实现4个如下的Restful API(假设此种语言为Go)。 * 语言 Go * 框架 随意 * 后端数据库 Redis或者SQLite,只需要一种即可 ## API 列表 * POST /location * GET /location * GET
李海彬
2018/03/20
2.1K0
在Ubuntu上快速搭建基于Beego的RESTful API
最近在研究Go,打算基于Go做点Web API,于是经过初步调研,打算用Beego这个框架,然后再结合其中提供的ORM以及Swagger的集成,可以快速搭建一个RESTful API的网站
深蓝studyzy
2022/06/16
5620
在Ubuntu上快速搭建基于Beego的RESTful API
beego web提高后端速度的尝试——改循环查询数据库为递归算法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/80530311
hotqin888
2018/09/11
1.3K0
beego web提高后端速度的尝试——改循环查询数据库为递归算法
golang学习之beego框架配合easyui实现增删改查及图片上传
demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DOCTYPE html> <html lang="en"> <head>
用户1141560
2017/12/26
1.9K0
golang学习之beego框架配合easyui实现增删改查及图片上传
MyBatis多条件查询、动态SQL、多表操作、注解开发详细教程
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
1.1K0
MyBatis多条件查询、动态SQL、多表操作、注解开发详细教程
MyBatis 多条件查询、动态SQL、多表操作、注解开发,应有尽有,一网打尽!
点击关注公众号,Java干货及时送达 来源:iyu77.blog.csdn.net/article/details/125761737 MyBatis封装了JDBC通过Mapper代理的方式,以前繁琐的操作通过“属性与字段映射”就简单化解,MyBatis的动态SQL完美展现了DBMS的独特魅力。 一、多条件查询 基于Mybatis的多条件查询,是在Mapper代理的映射文件中写上原有的SQL,然后接口中写一个带参的方法即可,就像这样: 相比于原生的JDBC那一套,通过MyBatis确实解决了不少硬编码的
Java技术栈
2022/09/19
1.5K0
MyBatis 多条件查询、动态SQL、多表操作、注解开发,应有尽有,一网打尽!
张孝祥java就业面试题大全
从享受生活的角度上来说:“程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做;第二,你非常痴迷和爱好程序,并且在这方面有一些天赋和优势。程序员的结局也是有两种:第一,默默退休,第二以程序员为起点或跳板,注意积累,跟对了好的老板或团队,找到和很好的搭档自己创业,成为IT金领和富翁。” 人们在时间面前是平等的,吾生也有涯,所以,你的经验更丰富点,那不算什么,经验是用时间积累的,你一生只有那么多时间,你能积累多少经验呢?最重要的是你的学习能力和学习方法,这个发挥的能量可以有很大差异,要提高学习能力和学习方法首先要学会思考和总结,要学会掌握事物的根本性的东西,而不是一些表面的细节。学习方法和学习能力对于IT工作者来说尤为重要,因为IT行业技术更新太快,并且细节太多,同一个技术的细节变来变去也是常有的事情,所以,IT技术学习者绝不能照着书籍和老师的讲解死记硬背和生搬硬套。搞IT工作很累人,如果学习方法不对、学习能力不强,那就更累了,不过,这怨不得别人,你的学习方法和学习能力只适合做刷盘子的工作,却非要跑到程序员圈子里来混,那谁能有办法拯救你! 在没有人指引的情况下,只能是自己一个知识点、一个知识点地漫无目的学习,等到积累了足够的知识量后,才有能力开始思考和琢磨原理方面的问题,这个学习过程很漫长。如果能在好老师的指引下,老师会启发你先思考原理问题,然后再去学习一个具体的知识点,让你能够举一反三、触类旁通,这样的学习效率就会更高。 多学了几个知识,并不能说明你就很厉害了,只能说是你比别人投入了更多的时间和精力而已,别人想做也能做到!不是你学了多少知识就算厉害了,关键是要用好学到的知识,要让学到的知识发挥出最大的社会价值和经济价值,这才是最厉害的。 另外,一个人的未来和造化,会深受环境的影响,所谓孟母三迁,近朱者赤、近墨者黑的大大道理,这些典故大家不一定能深刻领悟和感受,我们就不多说了。就拿现代比较接近我们生活的事例来说,如果你周围的朋友全是以擦皮鞋为生、每月辛辛苦苦下来就挣1500元,那么估计你的职业也是跟着擦皮鞋了,即使你再聪明和再勤奋,顶多每月比你那帮朋友多挣300元,合下来也就区区1800元/月。前几年只要抓住了大势,没钱全部找银行贷款了在北京买房、到山西开煤矿,是头猪也能每年大把大把地捞钱,如果你周围的朋友全是投机倒把的买房和开煤矿者,你的职业自然也是与他们干同样的事情,即使你再差,每年也能挣到百来万不成问题,这就是环境的重要性。聪明的你因为没有机会置身于炒房团中,比那些有机会接触炒房者的猪挣得就要少、就要累。到传智播客的环境中来,你就很有机会拿到高薪了,你可以不参加传智播客的培训,但只要想办法与传智播客的学员们住在一起,成功的机会就大多了。
MickyInvQ
2023/04/04
9580
[日常] 面试知识点总结(持续更新)
数据结构和算法: 物理结构和逻辑结构 1.逻辑结构(集合结构,线性结构,树形结构,图形结构) 2.物理结构一般是讲内存,顺序存储结构,链式存储结构 浅谈算法中,高斯算法从1加到100,循环的话是100次,高斯的方法只需要一次 1.推导大O阶:O(1) O(n) O(n^2) O(logn) 1.常数1取代时间所有加法常数 2.只保留最高项 3.去除项相乘的常数,去掉系数
唯一Chat
2019/09/10
5K0
linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续; (2) top:如果想对进程运行时间监控,应该用 top 命令; (3) kill 用于杀死进程或者给进程发送信号; (4) 查看文章最后的man手册,可以查看ps的每项输出的含义,to find: STANDARD FORMAT SPE
洗尽了浮华
2018/01/23
11.6K0
相关推荐
Beego Models之二对象的 CRUD 操作高级查询
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验