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

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

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

这个树状目录比如

projectid1

|

|

——projectid2

      |

      ——projectid3

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

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

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

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。示例代码如下:

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
ids := []int{1, 2, 3}
p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我爱编程

Day24访问数据库

使用SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在i...

3804
来自专栏Java后端生活

JDBC(三)PreparedStatement

SQL 注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL 语句段或命令,从而利用系统的 SQL 引擎完成恶意行为的做法

811
来自专栏Vamei实验室

来玩Play框架05 数据库

数据库是整个站点的数据储藏室。用户提交的数据可以存储在数据库中,以便未来使用。Play可以通过JDBC和数据库通信。我讲介绍Play和mysql数据库的连接。 ...

2289
来自专栏更流畅、简洁的软件开发方式

预防SQL注入攻击之我见

1、 SQL注入攻击的本质:让客户端传递过去的字符串变成SQL语句,而且能够被执行。 2、 每个程序员都必须肩负起防止SQL注入攻击的责任。   说起防止SQ...

5056
来自专栏散尽浮华

mysql表名忽略大小写问题记录

问题描述: 一开发同事在linux下调一个程序老是报错说找不到表,但是登陆mysql,show tables查看明明是已经创建了这张表的!!如下: mysql>...

3637
来自专栏后台架构

Sphinx源码学习笔记(一):索引创建

  因为项目开发需要在游戏内部实现玩家名称的模糊查找功能,本身直接使用Sphinx配置mysql可以直接搭建一套模糊匹配的即可支持功能的实现。

4697
来自专栏积累沉淀

Java设计模式(一)----单例模式

单例模式 一、特点: 二.分类 (一)、懒汉式单例 (二)、双重检查锁定 ...

2129
来自专栏NetCore

Sql语句收藏

1、 查询列表,按照In的排序进行排序 select *, (select count(0) from [picture] where album_id=[al...

20810
来自专栏陈本布衣

SQLite 带你入门

SQLite数据库相较于我们常用的Mysql,Oracle而言,实在是轻量得不行(最低只占几百K的内存)。平时开发或生产环境中使用各种类型的数据库,可能都需要...

4185
来自专栏技术碎碎念

sql server存储过程编程

存储过程是一组完成特定功能的SQL 语句集合,经编译后存储在数据库中。 存储过程作为一个单元进行处理并以一个名称来标识。它能向用户返回数据、向数据库表中写入或修...

4086

扫码关注云+社区

领取腾讯云代金券