一.查询方式
where() 方法
1.使用字符串作为查询条件
例:$member->where("user_name='小白' and id=1")->select()
2.使用数组进行查询
使用数组查询缺点:
如果是范围性查询,数组方式只能赋值,不能取值范围
如果是或者(or/||)的关系,数组查询也做不到
为了解决这个问题可以使用一个关键字: _logic 来定义这个或者(or/||)这个关系
例:在数组中把这个关键字当做下面写入然后给他赋值or或的逻辑判断
$condition['_logic'] = 'OR';
这样在进行查询操作,查询语句where条件就变成或者的关系,一但使用这个方法,
where语句条件都是或者的关系
例:
$arr['user_name']='小白';
$arr['id']=5;
$arr['_logic']='or';
dump($member->where($arr)->select());
3.使用对象的方式进行查询
首先要实例化出一个类对象
stdClass内置对象 可以使用它提供的这个标准类得到一个对象,然后对这个对象进行查询
例:
$obj=new \stdClass();
$obj->id='5';
$obj->user_name='小白';
$obj->_logic='or';
dump($member->where($obj)->select());
4.表达式查询
$map['字段名']=array('表达式','查询条件')
表达式不分大小写,支持的查询表达式有下面几种情况:
EQ 等于
NEQ 不等于
GT 大于
EGT 大于等于
LT 小于
ELT 小于等于
LIKE 模糊查询
[NOT]IN (不在)IN查询
[NOT]BETWEEN (不在)区间查询
is not null 非空查询
写这种表达式查询,必须要写这些单词,写符号不识别
例:
模糊查询 LIKE
$map['goods_name']=array('LIKE','%小米%');
dump($goods->where($map)->select());
如果 查询条件有多个模糊
$map['goods_name']=array('LIKE',array('%小米%','%英寸%'),'AND');
dump($goods->where($map)->select());
如果是除了他们别的都查询出来就用notlike 切记不能有空格
范围查询 between
$map['id']=array('between',array('2','10'));
dump($goods->where($map)->select());
in范围查询
$map['id']=array('in',array('1','3'));
dump($goods->where($map)->select());
exp复合查询
$map['id']=array('exp','in(1,3,8)');
dump($goods->where($map)->select());
5.统计查询
Count() 统计数量,参数是要统计的字段名(可选)
Max() 获取最大值,参数是要统计的字段名(必须)
Min() 获取最小值,参数是要统计的字段名(必须)
Avg() 获取平均值,参数是要统计的字段名(必须)
Sum() 获取总分,参数是要统计的字段名(必须)
6.sql查询
例:dump(M()->query("select * from yh_goods"));
7.动态查询
getBy 根据字段的值查询数据
这个by后面跟的是字段名
例:
dump($goods->getByid('9'));
dump($goods->getBygoods_name('照相机'));
getFieldBy 根据字段查询并返回某个字段的值
例:
根据一个字段的值找另一个字段的值
dump($goods->getFieldBygoods_name('照相机','id'));
8.子查询
当select方法传入false参数的时候,表示不执行当前查询,而只是生成查询SQL
使用buildSql方法,表示不执行当前查询,而只是生成查询SQL
子查询的意义:利用写的子查询的语句查询出的记录(虚拟表),在子查询的条件上再进行查询
以一个查询结果做为一个表来进行查询
例:
创建子查询
$tables=$goods->where("id>20")->buildSql();
利用子查询来进行查询
dump(M()->table($tables.' as sub_table')->min('id'));
9.多表查询
alias() 给表起别名
join() 内连接查询
例:
使用join进行查询
dump($goods->alias('g')
->join('__CATEGORY__ as c on g.cid=c.id')
->field('goods_name,cate_name')
->select()
);
使用where进行查询
dump(M()
->table(array('yh_goods'=>'g','yh_category'=>'c'))
->where('g.cid=c.id')
->field('g.id,goods_name,cate_name')
->select()
);