织梦二次开发,二次开发,李丕长,网站php二次开发,做网站,模板设计,jquery效果,jquery特效

当前位置: 主页 > Codeigniter&ThinkPHP >

Thinkphp 查询各种查询语句的表达式

时间:2014-02-20 13:08作者:LEO 点击:
普通查询语句的表达式: //$member=newModel('Member');等效下面实例化模型 $member =M( 'Member' ); //select方法获取当前表所有数据: $member -select(); //获取所有数据,以数组形式放回 //find方法 $member

 普通查询方式:

 

 

  1.  //$member = new Model('Member');等效下面实例化模型   
  2. $member = M('Member');   
  3. //select方法获取当前表所有数据:   
  4. $member->select();//获取所有数据,以数组形式放回   
  5. //find方法   
  6. $member->find();//返回一条数据,默认返回第一条数据   
  7. //如果需要返回其他的数据那么制定ID如下:   
  8. $member->find(3);//返回ID为3的数据3可以改成变量$id   
  9.  
  10. //当我们需要加上条件的时候比如 
  11. $member->where("id=3 and sex=1 and username='lipichang'")->find(); 
  12. //表示多条件查询,注意:username是字符串类型的所以必须要要加上单引号 

我们建议使用 数组形式给where传递查询条件如下

 

  1. $data=array( 
  2. 'id'  => 3, 
  3. 'sex'  => 1, 
  4. 'username' =>'lipichang' 
  5. ); 
  6. $member->where($data)->find();  
  7. //这样就不容易因为忘记写字符串类型的单引号而导致查询无结果的情况 

 

问题来了 以上生成的关系都是and链接条件的 如果我要改成or如何做呢?

其实很简单 只要加上另一个参数如下

 

  1. $data=array(  
  2. 'id'  => 3,  
  3. 'sex'  => 1,  
  4. 'username' =>'lipichang'
  5. '_logic'  =>'or' 
  6. );  
  7. $member->where($data)->find(); 
  8. //所以当我们不加_logic参数的值的时候 默认是 and链接查询的 

SELECT * FROM `lpc_member` WHERE ( `id` = 15  ) OR( `sex` = 1 ) OR( `username` = 'lipichang' ) limit 1;

这就是查询的语句更加清晰的可以看到了

 

二、表达式查询 语句 

如果我们查询id大于某一个值或者小于某一个值表达式

 

  1. $data=array(   
  2. 'id'  => array('GT',0),   
  3. );   
  4. $member->where($data)->select();  
  5. //表示查询所有id大于0的数据 
  6.  
  7.  
  8. $data=array(   
  9. 'id'  => array('LT',6),   
  10. );   
  11. $member->where($data)->select();  
  12. //表示查询所有id小于6的数据 

GT:大于

LT:小于

EQ:等于

NEQ:不等于

EGT:大于等于

ELT:小于等于 

以上都不区分大小写

模糊查询like的表达如下: 

 LIKE

  1. $data=array(    
  2. 'username'  => array('like','%li%'),    
  3. );   

如果查询以li开头的like查询就将

  1. $data=array(     
  2. 'username'  => array('like','li%'),     
  3. );   

如果查询以li结尾的数据
 

  1. $data=array(     
  2. 'username'  => array('like','%li'),     
  3. );    

 

相反如果我们查询不包含li的表达式则为:

NOT LIKE

  1. $data=array(      
  2. 'username'  => array('notlike','%li%'),      
  3. );     

 

 如果有多个like查询条件应该怎么写呢?

 

  1. $data=array(      
  2. 'username'  => array('like',array('%li%','%ang%')),      
  3. );     
  4. //表示username 包含li或者包含ang的数据 
  1. $member->where($data)->select();   

 如果我要把多个 like 改成并且 and 查询应该如何书写呢?

 

  1. $data=array(       
  2. 'username'  => array('like',array('%li%','%ang%'),'and'),//如果没有第三个值默认就是or的关系       
  3. );      
  4. //表示username 包含li并且包含ang的数据  

 

BETWEEN

 如果我们要使用between 在think中应该如何表达呢?

  1. $data=array(        
  2. 'username'  => array('between',array(3,5)),//表示id在3与5之间的数据 
  3. );       

SQL: 

SELECT * FROM `lpc_member` WHERE ( (`id` BETWEEN 1 AND 5 ) )

NOT BETWEEN

 那我们要取反 NOT BETWEEN 应该如何表达呢 和 like 的取反有所不同如下:

  1. $data=array(         
  2. 'username'  => array('not between',array(3,5)),//取id在3与5之间的相反数据 
  3. );     

SQL:

SELECT * FROM `lpc_member` WHERE ( (`id` NOT BETWEEN 2 AND 4 ) ) 

注意:like取反的时候是连着的notlike 而between 取反的时候 是分开的 not between 特别注意下

 

IN

 还有常见的查询 IN  和between类似 代码如下

  1. $data=array(          
  2. 'id'  => array('in',array(3,5,6)),//取id为3,5,6的数据  
  3. );     

SQL:

SELECT * FROM `lpc_member` WHERE  (`id` IN (3,5,6) )   

NOT IN

  1. $data=array(           
  2. 'id'  => array('not in',array(3,5,6)),//取除了id为3,5,6的数据   
  3. );      

 SQL:

SELECT * FROM `lpc_member` WHERE  (`id` NOT IN (3,5,6) )   

 

 

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
无觅相关文章插件,快速提升流量