首先回顾一下之前我们见过的几个方法:
如下,为获取username字段的值。
phpmyadmin查看数据的表,
假设我们想要获取ID=4的username的信息,便可以利用where进行连贯操作。
public function show(){
$m=M('User');
echo $m->where('id=4')->getField('username');//获取字段为username的字段信息
$this->display();
}
访问http://127.0.0.1/thinkphp/index.php/Index/show
接下来,我们开始今天的讲解,今天主要分为两个方面进行讲解,课程目录如下啦:
一、普通查询方式
a、字符串
b、数组
二、表达式查询方式
where添加条件可配合select、find、getFeild
$arr=$m->where("sex=0 and username='gege'")->find();
输出结果:
public function show(){
$m=M('User');
$data['sex']=0;
$data['username']='gege';
$arr=$m->where($data)->find();
//$arr=$m->where("sex=0 and username='gege'")->find();
var_dump($arr);
$this->display();
}
输出结果:默认逻辑关系为and
如果想要逻辑关系为OR,需要加上
$data['_logic']='or';
输出结果如下:
什么是表达式呢?
大于小于等于等等之类的。
EQ | 等于 |
NEQ | 不等于 |
GT | 大于 |
EGT | 大于等于 |
LT | 小于 |
ELT | 小于等于 |
LIKE | 模糊查询 |
假设我们想要所有id>4的数据,该怎么写呢?可利用select查询所有的哦!
public function show(){
$m=M('User');
$data['id']=array('GT',4);
$arr=$m->where($data)->select();
var_dump($arr);
$this->display();
}
public function show(){
$m=M('User');
$data['username']=array('like','%ge');
$arr=$m->where($data)->select();
var_dump($arr);
$this->display();
}
当匹配多个通配符时,默认关系为OR
$data['username']=array('notlike',array('%ge%','%4%'));
如果想要条件为and时,需要在外面添加一个and。
$data['username']=array('like',array('%ge%','%2%','%五%'),'and');//如果没有第三个值,默认关系是or关系
$data['username']=array('notlike','%ge%'); //notlike中间没有空格
public function show(){
$m=M('User');
$data['id']=array('between',array(5,7));//id在5~7之间
$arr=$m->where($data)->select();
var_dump($arr);
$this->display();
}
not between不在……之间,需要空格
$data['id']=array('not between',array(5,7));//注意,not 和 between中间一定要有空格
$arr=$m->where($data)->select();
in 在……内(范围不一定连续,可以人为指定),例如id在4,6,7之间
$data['id']=array('in',array(4,6,7));
$arr=$m->where($data)->select();
(电脑发生了格式化,因此数据库是新建的,所以检测数来的数据与上面是不一样的!新数据库如下:)
区间查询顾名思义就是按区间进行查询。
array(array('gt',4),array('lt',10));//默认关系是 and 的关系。
假设我们需要OR的关系, 则需要传入一个OR参数。array(array('gt',4),array('lt',10),'or')
假设我们查询id大于4小于8的数据。,
public function show(){
$m=M('User');
$data['id']=array(array('gt',4),array('lt',6));//默认关系是 and 的关系
$arr=$m->where($data)->select();
var_dump($arr);
$this->display();
}
等价于
SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 6) )
输出结果:访问:http://127.0.0.1/thinkphp/Index.php/Index/show
username包含2或者五或者gege的数据。(或者需要添加参数OR)
$data['username']=array(array('like','%2%'),array('like','%五%'),'gege','or');
$arr=$m->where($data)->select();
var_dump($arr);
访问:http://127.0.0.1/thinkphp/Index.php/Index/show
在不断实践中其实我们可以发现区间查询和上面的数组查询其实是有相似性,类似于数组查询里面的参数换成了数组
函数 | 作用 |
---|---|
count | 获取个数函数作用 |
max | 获取最大数 |
min | 获取最小数 |
avg | 获取平均数 |
sum | 获取总和 |
$m=M('User');
$c=$m->count();
echo $c;
获取username=‘gege’的用户数:
# where形式
$c=$m->where("username='gege1'")->count();
# 数组形式
$data["username"]="gege";
$c=$m->where($data)->count();
$c = $m->max('id');//返回id字段的最大值
echo $c;
$m=M('User');
//$c=$m->max('id');//返回id字段的最大值
//$c=$m->min('id');//返回id字段的最小值
//$c=$m->avg('id');//返回id字段的平均值
$c=$m->sum('id');//返回id字段的总和
echo $c;
成功返回数据的结果集
失败返回boolean false
$m=M('User');
$result=$m->query("select * from tp_user where id >5"); # 返回为真
//$result=$m->query("select * from tp_user where id >5"); # 返回为假
var_dump($result);
成功返回影响行数
失败返回boolean false
$m=M('User');
$result=$m->execute("insert into t_user(`username`) values('ztz3')");//执行插入操作
var_dump($result);