ThinkPHP 5.0クエリ条件where()使用

44881 ワード

記事の目次
  • where()指定条件
  • 文字列条件
  • 文字列条件を用いて直接検索動作
  • 文字列条件+前処理機構を使用して
  • を使用する.
  • 配列条件(tp公式推奨)
  • 普通クエリー
  • 式クエリ
  • 表現の意味
  • 条件判定クエリー
  • あいまい検索
  • [not]betweenクエリ
  • [not]inクエリー
  • クイッククエリ
  • 異なるフィールドの同じ条件のクエリー
  • 区間クエリ
  • 同じフィールドで、異なる条件クエリー
  • マルチ呼び出し
  • where()指定条件
  • チェーン操作中間方法で、データベース操作条件を指定します.最も一般的な方法
  • パラメータ伝達方式(idを10に設定する条件)
  • 方式1、パラメータ、文字列条件直接クエリー
  • 方式2において、フィールド名はキーの関連配列where(array('id'=>array('eq',10)))
  • である.
  • 方式3、2つのパラメータ、1つ目はフィールド名、2番目はフィールド値where('id',10)
  • です.
  • 方式4、3つのパラメータ、1番目はフィールド名、2番目は条件、3番目のパラメータは値where('id','eq',10)
  • である.
  • は影響行数
  • を返します.
    
    namespace app\index\controller;
    use \think\Controller;
    use \think\Db;
    class Index extends Controller{
        public function index(){
            $data = array('name'=>'xiao1','create_time'=>time());
            $rel = db('data')->where(array('id'=>array('eq',10)))->update($data);//  1
            $rel = db('data')->where('id',10)->update($data);//  2
            $rel = db('data')->where('id','eq',10)->update($data);//  3
            dump($rel);
        }
    }
    
    
    出力結果
    int(1)
    
    文字列の条件
    文字列の条件を使って直接に検索します.
    $rel1 = db('data')->where('id=15 and type=0')->select();//  1
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE ( id=15 and type=0 )
    
    文字列条件+前処理機構を使って一緒に使用します.
    $rel1 = db('data')->where("id=:id and type=:type")->bind(['id'=>15,'type'=>0])->select();//  1
    $rel2 = db('data')->where("id=? and type=?")->bind([15,0])->select();//  2
    $rel3 = db('data')->where("id=:id and type=:type",array('id'=>$id,'type'=>$type))->select();//  3
    $rel4 = db('data')->where("id=? and type=?",array($id,$type))->select();//  4
    
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE ( id='15' and type='0' )
    
    配列条件(tp公式推奨)
    一般クエリー
    $map = array(
                'id'=>15,
                'type'=>0,
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE `id` = 15 AND `type` = 0
    
    表式クエリー
  • ドルmap[フィールド1]=array(「表式」、「クエリー条件1」)
  • ドルmap[フィールド2]=array(「表式」、「照会条件2」)
  • db(‘table’)->where($map)->select();
  • 式の意味
    表式には大文字と小文字の区別なく、サポートされているクエリー表式には以下のような種類があります.
    表式
    意味
    EQ
    イコール(=)
    NEQ
    等しくない(<>)
    GT
    大きい(>)
    EGT
    以上(>=)
    LT
    小さい(
    ELT
    小なりイコール(=)
    LIKE
    あいまい検索
    [NOT]BETWEEN
    (不在)区間照会
    [NOT]IN
    (不在)INクエリ
    条件判定クエリ
    例1:クエリーid<10およびtype=0のデータ
    $map = array(
                'id'=>array('lt',10),
                'type'=>array('eq',0),
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE `id` < 10 AND `type` = 0 
    
    あいまい検索
    例2:クエリーname like %xiao%
    $map = array(
                'name'=>array('like','%xiao%'),
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE `name` LIKE '%xiao%' 
    
    例3:クエリーname like %xiao% or name like %rufeike%
    $map = array(
                'name'=>array('like',array('%xiao%','%rufeike%'),'OR'),
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE (`name` LIKE '%xiao%' OR `name` LIKE '%rufeike%')
    
    [not]between検索
    $map = array(
                'id'=>array('between',array(1,2))//  
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    
    $map = array(
                'id'=>array('between','1,2')//   
            );
    $rel2 = db('data')->where($map)->select();//  2
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE `id` BETWEEN 1 AND 2
    
    [not]inクエリ
    $map = array(
                'id'=>array('in','1,2')
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    $map = array(
                'id'=>array('in',array(1,2))
            );
    $rel2 = db('data')->where($map)->select();//  2
    
    コンパイル結果
     SELECT * FROM `tp_data` WHERE `id` IN (1,2)
    
    クイック検索
    異なるフィールドと同じ条件のクエリー
    //  id=1   type = 1   
    $map = array(
                'id&type'=>1
            );
    $rel1 = db('data')->where($map)->select();//  1
    //  id=1   type = 1   
    $map = array(
                'id|type'=>1
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE ( `id` = 1 AND `type` = 1 ) 
    SELECT * FROM `tp_data` WHERE ( `id` = 1 OR `type` = 1 )
    
    区間検索
    同じフィールド、異なる条件のクエリー
    例1 id > 1 AND id < 10
    $map = array(
                'id'=>array(array('gt',1),array('lt',10))
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    コンパイル結果
     SELECT * FROM `tp_data` WHERE ( `id` > 1 AND `id` < 10 )
    
    例2 id < 10 OR id > 12
    $map = array(
                'id'=>array(array('lt',10),array('gt',12),'OR')
            );
    $rel1 = db('data')->where($map)->select();//  1
    
    コンパイル結果
    SELECT * FROM `tp_data` WHERE ( `id` < 10 OR `id` > 12 )
    
    コールバック
  • where()方法は、
  • を複数回呼び出すことができます.
    $map = array(
                'id'=>array('gt',5)
            );
            $map2 = array(
                'id'=>array('lt',15),
                'type'=>array('eq',0),
            );
    $rel1 = db('data')->where($map)->where($map2)->select();//  1
    
    コンパイル結果
     SELECT * FROM `tp_data` WHERE ( `id` > 5 AND `id` < 15 ) AND `type` = 0