ThinkPHP--SQL查询语句

查询方式

tp提供了三种基本查询方式:字符串查询索引数组条件查询对象查询多数情况下对提交使用索引数组查询和对象查询作为查询条件,因为会更加安全。
基于UserController.class.php文件

字符串作为条件查询
<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
    //字符串作为查询条件   
         var_dump($user->where('id=1')->select());
    }
}
使用索引数组作为查询条件
<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        //使用索引数组作为查询条件
        $condition['id'] = 1;
        $condition['user'] = '小新';
        //改变默认是‘AND’
        $condition['_logic'] = 'OR';
        var_dump($user->where($condition)->select());
    }
}
使用对象方式作为查询条件
<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        //使用对象作为查询条件
        // \stdClass()是php5默认的空类
        $condition = new \stdClass();
        $condition->id = 1;
        $condition->user = '小新';
        //默认查询由AND变成OR
        $condition->_logic = 'OR';
        var_dump($user->where($condition)->select());
    }
}

PS:stdClass是PHP内置的类,可以理解为一个空类。而这里的‘\’是将命名空间设置为根目录,否则会导致当前目录找不到此类。
PS:使用对象和数组查询效果是一样的,多数情况下,TP推荐使用数组形式更加高高效。

表达式查询

要实现模糊查询,可以使用表达式查询。
这里写图片描述


<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
       //$map[id] =array('eq',1); //等于
        //$map[id] =array('neq',1); //不等于
       //$map[id] =array('gt',1); //大于
        //$map[user] = array('like','%小%'); //包含小字的字段
        $map[user] = array('notlike','%小%'); //不包含小字的字段
        var_dump($user->where($map)->select());
    }
}

快捷查询

不同字段,相同查询条件
<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        $map['user|email'] = '小新';
        var_dump($user->where($map)->select());
    }
}

返回结果为:user or email为小新的值。
当然,and的条件即:

<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        $map['user&email'] = '小新';
        var_dump($user->where($map)->select());
    }
}

返回结果就是:user和email都为小新的值。

不同字段不同查询条件
<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        //'_multi'=>true,设置查询条件一一对应
        //也就是id为1,user为‘小新’
        $map['id&user'] = array(1,'小新','_multi'=>true);
        var_dump($user->where($map)->select());
    }
}

PS:设置‘_multi’为true,是为了让id对应1,让user对应‘小新’,否则就会出现id对应了1还要对应‘小新’的情况,而且这设置要放在数组最后

当然也可以和表达式进行组合

$user = M('User');
$map['id'] = array(array('gt',0),'小新','_multi'=>true);
var_dump($user->where($map)->select());
区间查询
<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        //'_multi'=>true,设置查询条件一一对应
        //也就是id为1,user为‘小新’
        $map['id'] = array(array('gt',1),array('lt',4),'小新','OR');
        var_dump($user->where($map)->select());
    }
}
组合查询

组合查询基于索引数组方式的一个扩展性查询,添加了字符串查询(_string)、复合查询(_complex)、请求字符串查询(_query)。由于采用的是索引数组,重复的会被覆盖。

_string(字符串查询)

<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        $map['id'] = array('eq',1);
        $map['_string'] = 'user="小新"&email="xiaoxin@163.com"';
        //$map['_logic'] = 'OR';
        var_dump($user->where($map)->select());
    }
}

_query(请求字符串查询)

<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        $map['id'] = array('eq',1);
        $map['_query'] = 'user=小新&email=xiaoxin@163.com';
        var_dump($user->where($map)->select());
    }
}

_complex(复合查询)

<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        $map['id'] = array('eq',1);
        $where['id'] = 2;
        $map['_complex'] = $where;
        $map['_logic'] = 'OR';
        $map['_string'] = 'user="小新"&email="xiaoxin@163.com"';
        var_dump($user->where($map)->select());
    }
}

PS:复合查询可以构建很复杂的查询。

统计查询

数据总条数

<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
    public function index($user,$pass){
        echo 'user:'.$user,'<br/>pass:'.$pass;
    }
    public function model(){
        $user = M('User');
        var_dump($user->count());
    }
}

字段总条数

$user = M('User'); var_dump($user->count('mail'));

最大值

$user = M('User'); var_dump($user->max('id'));

最小值

$user = M('User'); var_dump($user->min('id'));

平均值

$user = M('User'); var_dump($user->avg('id'));

求总和

$user = M('User'); var_dump($user->sum('id'));
动态查询

以PHP5新特性为主,TP实现了动态查询:
1、getBy动态查询

$user = M('User'); var_dump($user->getByMail('xiaoxin@163.com'));

2、getFieldBy动态查询

$user = M('User'); var_dump($user->getFieldByUser('路飞','id'));
SQL查询

TP支持原生SQL查询。
1、query读取

//如果采用分布式读写分离,则始终在读服务器执行 $user = M('User'); var_dump($user->query('SELECT $ FROM think_user'));

2、execute写入

//如果采用分布式读写分离,则始终在写服务器执行 $user = M('User'); var_dump($user->execute('UPDATE think_user SET user = "小新" where id = 1 '));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值