zoukankan      html  css  js  c++  java
  • thinkphp _complex 复合查询 where多个子组实现

    SELECT * FROM `user` WHERE (  `mobile` = '13824653465' OR `nickname` = 'evan' OR `openid` = '14545-fdes'  ) AND (  `bind_seller` = 'fdaflj24214'  OR `seller_type` = '1'  ) AND ( `reg_time` < 12324568  AND  `login_count` > 10  )
    

      THINKPHP 数组where实现多个复合查询,例如上面的sql。查询官方手册,感觉无法实现。于是想到修改一下THINKPHP框架的DB类。

    thinkphp 3.1 文件所在 ThinkPHPLibCoreDb.class.php

    tthinkphp 3.2  ThinkPHPLibraryThinkDbDriver.class.php

    修改这个方法

     1     protected function parseThinkWhere($key,$val) {
     2         $whereStr   = '';
     3         switch($key) {
     4             case '_string':
     5                 // 字符串模式查询条件
     6                 $whereStr = $val;
     7                 break;
     8             case '_complex':
     9             case '_complex1': //增加多个case分支,支持多个符合 只查询
    10             case '_complex2':
    11             case '_complex3':
    12             case '_complex4':13                 // 复合查询条件
    14                 $whereStr = substr($this->parseWhere($val),6);
    15                 break;
    16             case '_query':
    17                 // 字符串模式查询条件
    18                 parse_str($val,$where);
    19                 if(isset($where['_logic'])) {
    20                     $op   =  ' '.strtoupper($where['_logic']).' ';
    21                     unset($where['_logic']);
    22                 }else{
    23                     $op   =  ' AND ';
    24                 }
    25                 $array   =  array();
    26                 foreach ($where as $field=>$data)
    27                     $array[] = $this->parseKey($field).' = '.$this->parseValue($data);
    28                 $whereStr   = implode($op,$array);
    29                 break;
    30         }
    31         return $whereStr;
    32     }
     $      where['mobile'] = '13824653465';
            $where['_logic']  = 'or';
            $where['nickname'] = 'evan';
            $where['openid']  = '14545-fdes';
    
    
    
            $where2['bind_seller'] = 'fdaflj24214';
            $where2['seller_type'] = '1';
            $where2['_logic']      = 'or';
    
            $where3['reg_time']    = array('lt',12324568);
            $where3['login_count'] = array('gt',10);
    
            $map['_complex'] = $where;
            $map['_complex1']= $where2;
            $map['_complex2']= $where3;
    
            $sql = M('User')->where($map)->select();
            echo M()->getLastSql();
    

      

  • 相关阅读:
    ajax中网页传输(三)XML——下拉列表显示练习
    ajax中网页传输(二)JSON——下拉列表显示练习
    ajax中网页传输(一)TEXT——带有删除功能的数据库表格显示练习
    ajax讲解:“创建用户”和“用户登录”练习
    JSON讲解和“弹窗”
    jQuery讲解
    Victor and String[Bestcoder #52 1004](回文树)
    回文串[APIO2014](回文树)
    回文子串计数[自创](回文树)
    随机序列[SHOI2016](找规律+线段树)
  • 原文地址:https://www.cnblogs.com/guohong-hu/p/8005951.html
Copyright © 2011-2022 走看看