Thinkjs关系数据库学习——查询数据
模型提供了多种方法来查询数据:
- find 查询单条数据
- select 查询多条数据
- count 查询总条数
- countSelect 分页查询数据
- max 查询字段的最大值
- avg 查询字段的平均值
- min 查询字段的最小值
- sum 对字段值进行求和
- getField 查询指定字段的值
1)find 查询单条语句
model.find(options)
options{Object} 操作选项,会通过 parseOptions 方法解析return{Promise} 返回单条数据
查询单条数据,返回的数据类型为对象。如果未查询到相关数据,返回值为 {}。
module.exports=class extends think.Controller{
async listAction(){
let model =this.model('user');
let data=await model.where({name: 'thinkjs'}).find();
//data returns {name: 'thinkjs', email: 'admin@thinkjs.org,...'}
if(think.isEmpty(data)){
//内容为空时的处理
}
}
}
可通过think.isEmpty 方法判断返回值是否为空。
2)select查询多条语句
model.select(options)
- options{Object} 操作选项
- return{Promise} 返回多条数据
查询多条数据,返回的数据类型为数组。如未查询到相关数据,返回值为[ ].
module.exports=class extends think.Controller {
async listAction(){
let model=this.model('user');
let data=await model.limit(2).select();
//data returns [{name:'thinkjs',email: 'admin@thinkjs.org'},...]
if(think.isEmpty(data)){
}
}
}
可通过think.isEmpty方法判断返回值是否为空。
3)count 返回总条数
model.count(field)
- field{String} 字段名,如果不指定那么值为 *
- return{Promise} 返回总条数
获取总条数。
module.exports = class extends think.Model{
//获取字段值之和
getScoreCount(){
//SELECT COUT (score) AS think_count FROM 'test_d' LIMIT 1
return this.count('score');
}
}
model.sum(field)
- field{String} 字段名
- return{Promise} 返回总条数
对字段值进行求和。
module.exports = class extends think.Model{
//获取字段值之和
getScoreCount(){
//SELECT SUM(score) AS think_sum FROM 'test_d' LIMIT 1
return this.sum('score');
}
}
model.min(field)
- field{String} 字段名
- return{Promise}
求字段的最小值。
module.exports = class extends think.Model{
//获取字段最小值
getScoreMin(){
//SELECT MIN (score) AS think_min FROM 'test_d' LIMIT 1
return this.min('score');
}
}
model.max(field)
- field{String} 字段名
- return{Promise}
求字段的最大值。
module.exports = class extends think.Model{
//获取字段最大值
getScoreMax(){
//SELECT MAX (score) AS think_max FROM 'test_d' LIMIT 1
return this.max('score');
}
}
model.avg(field)
- field{String} 字段名
- return{Promise}
求字段的平均值。
module.exports = class extends think.Model{
//获取平均分
getScoreCount(){
//SELECT AVG (score) AS think_avg FROM 'test_d' LIMIT 1
return this.avg('score');
}
}
4) getField 查询指定字段的值
model.getField(field,num)
- field{String} 字段名,多个字段用逗号隔开
- num {Boolean |Number} 需要的条数
- return{Promise}
获取特定字段的值,可以设置where/group等条件
获取单个字段的所有列表
module.exports = class extends think.Controller{
async listAction(){
const data=await this.model('user').getField('c_id');
//data=[1,2,3,4,5]
}
}
指定个数获取单个字段的列表
module.exports = class extends think.Controller{
async listAction(){
const data=await this.model('user').getField('c_id',3);
//data=[1,2,3]
}
}
获取单个字段的一个值
module.exports = class extends think.Controller{
async listAction(){
const data=await this.model('user').getField('c_id',true);
//data=1
}
}
获取多个字段的所有列表
module.exports = class extends think.Controller{
async listAction(){
const data=await this.model('user').getField('c_id,d_name');
//data={c_id: [1,2,3,4,5], d_name:[ 'a', 'b', 'c' ,'d' ,'e']}
}
}
获取指定个数的多个字段的所有列表
module.exports = class extends think.Controller{
async listAction(){
const data=await this.model('user').getField('c_id,d_name,3');
//data={c_id: [1,2,3], d_name:[ 'a', 'b', 'c' ]}
}
}
获取多个字段的单一值
module.exports = class extends think.Controller{
async listAction(){
const data=await this.model('user').getField('c_id,d_name',true);
//data={c_id: 1, d_name: 'a'}
}
}
5)countSelect 分页查询数据
model.countSelect(options,pageFlag)
- options{Number|Object}操作选项,会通过parseOptions方法解析
- pageFlag{Boolean}当页数不合法时处理,true为修正到第一页,false为修正到最后一页,默认不修正
- return{Promise}
分页查询,一般需要结合page方法一起使用。
module.exports = class extends think.Controller{
async listAction(){
let model =this.model('user');
let data=await model.page(this.get('page')).countSelect();
}
}
返回值结构如下:
{
pageSize: 10, //每页显示的条数, think-model@1.1.8 之前该字段为 pagesize
currentPage: 1, //当前页
count: 100, //总条数
totalPages: 10, //总页数
data: [{ //当前页下的数据列表
name: "thinkjs",
email: "admin@thinkjs.org"
}, ...]
}
有时候总条数是放在其他表存储的,不需要再查当前表获取总条数了,这个时候可以通过将第一个参数 options 设置为总条数来查询
module.exports = class extends think.Controller {
async listAction(){
const model = this.model('user');
const total = 256;
// 指定总条数查询
const data = await model.page(this.get('page')).countSelect(total);
}
}
Thinkjs关系数据库学习——查询数据的更多相关文章
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- mysql学习【第3篇】:使用DQL查询数据
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第3篇]:使用DQL查询数据 DQL语言 DQL( Data Query Lan ...
- MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)
知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...
- MySQL学习——查询表里的数据
MySQL学习——查询表里的数据 摘要:本文主要学习了使用DQL语句查询表里数据的方法. 数据查询 语法 select [distinct] 列1 [as '别名1'], ..., 列n [as '别 ...
- MySQL基础学习之数据查询
一般查询 SELECT * FROM 表名 SELECT 属性名 FROM 表名 条件查询 SELECT 属性名 FROM 表名 WHERE 条件表达式 查询数据值1,数据值2的表单 SELEC ...
- hibernate框架学习之数据查询(HQL)
lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...
- flask再学习-思考之怎么从数据库中查询数据在页面展示!
看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 查询数据
MySQL 数据库使用SQL SELECT语句来查询数据. 可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MySQL数据库中查询数据通用 ...
- android: SQLite查询数据
掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...
随机推荐
- FAT32文件系统的存储组织结构(一)
对磁盘的物理结构,逻辑结构和存储结构有了比较深入的了解后,我们来仔细探讨FAT32文件系统的存储组织结构.说到文件系统的组织结构,我们应该马上意识到,这指的是文件系统在同一个分区内的组织结构,在这个话 ...
- 常用UI框架
jQuery Smart UI 链接地址:http://smartui.chinamzz.com Liger UI框架链接地址:http://www.ligerui.com/ DWZ富客户端框架(jQ ...
- 石子归并 51Nod - 1021
N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价. 例如: 1 2 3 4,有 ...
- 【CJOJ2440】大话西游(树链剖分)
题面 Description "大话西游" 是一个在中国非常流行的在线游戏, 由 NIE 公司开发和维护. 这个游戏来源于著名的小说<西游记> 和周星弛的电影, 游戏的 ...
- [Luogu2057]善意的投票
题目戳我 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投 ...
- [CQOI2007]余数求和
大于k的部分直接加k 对于小于等于k的cnt个数 ans=cnt*k - Σ(k/i * i) 然后k/i在一段区间内不变,这段区间直接可以数列求和 # include <bits/stdc++ ...
- [BZOJ1430] 小猴打架 (prufer编码)
Description 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打架之后,整个森 ...
- SpringMVC 注解式开发
SpringMVC的注解式开发是指,处理器是基于注解的类的开发.对于每一个定义的处理器,无需再配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册.即注解替换是配置文件中对于处理器的注册 ...
- .NET Core使用skiasharp文字头像生成方案(基于docker发布)
一.问题背景 目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET FrameWork下我们已经习惯使用System.Drawing类库做简单的图像处理,到了.NET Core下一脸 ...
- 洛谷 P1564 膜拜
题目出处 s[i]表示前i个人对神牛的膜拜情况,如果膜拜神牛甲则s[i]=s[i-1]+1否则s[i]=s[i-1]-1.那么如果|s[i]-s[j]|<=m或者=i-j+1(也就是人数差不超过 ...