thinkphpクエリーselect操作

174259 ワード

読み取り(Read)ThinkPHPでデータを読み取る方式は多く、通常は読み取りデータと読み取りデータセットに分けられる.
データセットの読み取りにはselectメソッドが使用されます(新しいfindallメソッドは廃止されました):
selectクエリーデータセット
使用法
select($options=array())
パラメータ
options(オプション):配列の場合は操作式を表し、通常は一貫した操作で完了します.数値または文字列の場合は、プライマリ・キーの値を表します.デフォルトは空の配列です.
コールバックインタフェース
クエリ成功_after_select(&$resultSet,$options)
戻り値
クエリエラーfalseクエリ結果が空の場合nullクエリがクエリに正常に返された結果セット(2 Dインデックス配列)を返します.
関連メソッド
通常は一貫した操作where、field、order、limit、joinなどと組み合わせて使用されます
使用例:
  1. $User = M("User"); //  User
  2.  //  status 1     10
  3. $list = $User->where('status=1')->order('create_time')->limit(10)->select();
Select 。 where , , 。 , , 。
2
find :
find
find($options=array())
options( ): , ; 。 。
 _after_find(&$result,$options)

false


null


( )

where、field、order、join
,select find , find , limit find 。
  1. $User = M("User"); //  User
  2.  //  status 1name think  
  3. $User->where('status=1 AND name="think"')->find();
,find 。
1
, getField
getField
getField($field,$sepa=null)

field( ): ( )


sepa( ): ,  NULL 。 null。

 _after_find(&$result,$options)

null


field


field , 。 ,sepa null 。

where、limit、order
  1. $User = M("User"); //  User
  2.  //  ID 3  
  3. $nickname = $User->where('id=3')->getField('nickname');
, 。
, :
  1. $this->getField('id',true); //  id
, :
  1. $User = M("User"); //  User
  2.  //  ID  
  3. $list = $User->getField('id,nickname');
list , id, nickname。
, :
  1. $list = $User->getField('id,nickname,email');
, select , id( getField )。
  1. $list = $User->getField('id,nickname,email',':');
, id, nickname:email 。

getField sepa , :
  1. $this->getField('id,name',5); //  5
  2. $this->getField('id',3); //  id   3
order 。

ThinkPHP , , 。

, , :
  1. $User = M("User"); //  User
  2. $User->where('type=1 AND status=1')->select(); 
SQL
SELECT * FROM think_user WHERE type=1 AND status=1
1
  1. $User = M("User"); //  User
  2. $condition['name'] = 'thinkphp';
  3. $condition['status'] = 1;
  4.  // 
  5. $User->where($condition)->select(); 
SQL
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
, AND, , _logic :
  1. $User = M("User"); //  User
  2. $condition['name'] = 'thinkphp';
  3. $condition['account'] = 'thinkphp';
  4. $condition['_logic'] = 'OR';
  5.  // 
  6. $User->where($condition)->select(); 
SQL
SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'
1
 ( stdClass )
  1. $User = M("User"); //  User
  2.  // 
  3. $condition = new stdClass(); 
  4. $condition->name = 'thinkphp'; 
  5. $condition->status= 1; 
  6. $User->where($condition)->select(); 
SQL
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
, , , , 。
6

, SQL , ( ), :
$map[' '] = array(' ',' ');
, , :
EQ (=)
NEQ (<>)
GT (>)
EGT (>=)
LT
ELT (<=)
LIKE
[NOT] BETWEEN ( )
[NOT] IN ( )IN 
EXP , SQL

EQ : (=)
  1. $map['id']  = array('eq',100);
  1. $map['id']  = 100;
id = 100

NEQ: (<>)
  1. $map['id']  = array('neq',100);
id <> 100

GT: (>)
  1. $map['id']  = array('gt',100);
id > 100

EGT: (>=)
  1. $map['id']  = array('egt',100);
id >= 100

LT: ( :
  1. $map['id']  = array('lt',100);
id < 100

ELT: (<=)
  1. $map['id']  = array('elt',100);
id <= 100

[NOT] LIKE: sql LIKE
  1. $map['name'] = array('like','thinkphp%');
name like 'thinkphp%'
DB_LIKE_FIELDS , 。 :
  1. 'DB_LIKE_FIELDS'=>'title|content'
  1. $map['title'] = 'thinkphp';
name like '%thinkphp%'
  1. $map['a'] =array('like',array('%thinkphp%','%tp'),'OR');
  2. $map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND');

(a like '%thinkphp%' OR a like '%tp') AND (b not like '%thinkphp%' AND b not like '%tp')

[NOT] BETWEEN : sql [not] between, , :
  1. $map['id']  = array('between','1,8');
  1. $map['id']  = array('between',array('1','8'));
id BETWEEN 1 AND 8

[NOT] IN: sql [not] in , , :
  1. $map['id']  = array('not in','1,5,8');
  1. $map['id']  = array('not in',array('1','5','8'));
id NOT IN (1,5, 8)
EXP: ,
  1. $map['id']  = array('in','1,3,8');
  1. $map['id']  = array('exp',' IN (1,3,8) ');
exp , SQL , 。 , , :
  1. $User = M("User"); //  User
  2.  // 
  3. $data['name'] = 'ThinkPHP';
  4. $data['score'] = array('exp','score+1');//  1
  5. $User->where('id=5')->save($data); // 
1

, , :
  1. $User = M("User"); //  User
  2. $map['name|title'] = 'thinkphp';
  3.  // 
  4. $User->where($map)->select(); 
 name= 'thinkphp' OR title = 'thinkphp'

  1. $User = M("User"); //  User
  2. $map['status&title'] =array('1','thinkphp','_multi'=>true);
  3.  // 
  4. $User->where($map)->select(); 
'_multi'=>true , ,  status= 1 AND title = 'thinkphp' , , :
$map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);
 status= 1 AND score >0 AND title = 'thinkphp'

: “|” “&” 。
2

ThinkPHP , :
  1. $map['id'] = array(array('gt',1),array('lt',10)) ;
: (`id` > 1) AND (`id` < 10)
  1. $map['id'] = array(array('gt',3),array('lt',10), 'or') ;
: (`id` > 3) OR (`id` < 10)
  1. $map['id']  = array(array('neq',6),array('gt',3),'and'); 
:(`id` != 6) AND (`id` > 3)
AND、 OR XOR , , AND 。
, LIKE、GT EXP 。 , , :
  1. $map['name']  = array(array('like','%a%'), array('like','%b%'), array('like','%c%'), 'ThinkPHP','or'); 
  1. (`name` LIKE '%a%') OR (`name` LIKE '%b%') OR (`name` LIKE '%c%') OR (`name` = 'ThinkPHP')
2

, 。
, , (_string)、 (_complex)、 (_query), , , 。
( _string )
, :
  1. $User = M("User"); //  User
  2. $map['id'] = array('neq',1);
  3. $map['name'] = 'ok';
  4. $map['_string'] = 'status=1 AND score>10';
  5. $User->where($map)->select(); 

( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )


URL , 。
  1. $map['id'] = array('gt','100');
  2. $map['_query'] = 'status=1&score=100&_logic=or';
:`id`>100 AND (`status` = '1' OR `score` = '100')


, , 。
  1. $where['name']  = array('like', '%thinkphp%');
  2. $where['title']  = array('like','%thinkphp%');
  3. $where['_logic'] = 'or';
  4. $map['_complex'] = $where;
  5. $map['id']  = array('gt',1);
 
( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )
_complex , , 。
, :
  1. $where['id'] = array('gt',1);
  2. $where['_string'] = ' (name like "%thinkphp%")  OR ( title like "%thinkphp") ';
SQL 。
3

, ( ) 、 、 ,ThinkPHP , :
Count , ( )
Max , ( )
Min , ( )
Avg , ( )
Sum , ( )
  1. $User = M("User"); //  User
  1. $userCount = $User->count();
  1. $userCount = $User->count("id");
  1. $maxScore = $User->max('score');
0 :
  1. $minScore = $User->where('score>0')->min('score');
  1. $avgScore = $User->avg('score');
  1. $sumScore = $User->sum('score');

ThinkPHP , , getN 。 : 
  3 :
  1. $User->where('score>0')->order('score desc')->getN(2);
  :
  1. $User-> where('score>80')->order('score desc')->getN(-2);
  :
  1. $User->where('score>80')->order('score desc')->first();
  :
  1. $User->where('score>80')->order('score desc')->last();

SQL

ThinkPHP ORM ActiveRecord , , ThinkPHP SQL , ,SQL Db , 。 :
1、query
query   SQL
query($sql,$parse=false)
query( ): SQL
parse( ): SQL

false


( select )

  1. $Model = new Model() //  model  
  2. $Model->query("select * from think_user where status=1");
, ,query , query , SQL 。
2、execute
execute sql
execute($sql,$parse=false)
query( ): SQL
parse( ): SQL
false 
  1. $Model = new Model() //  model  
  2. $Model->execute("update think_user set name='thinkPHP' where status=1");
, ,execute , execute , SQL 。
3、

SQL , , SQL sql , , 。
  1. $model = M("User");
  2. $model->query('select * from __TABLE__ where status>1');
__TABLE__ , , , sql 。

SQL
query execute SQL , SQL ( false sql ), true SQL ( )。
, :
  1. $model->table("think_user")
  2.       ->where(array("name"=>"thinkphp"))
  3.       ->field("id,name,email")
  4.       ->query('select %FIELD% from %TABLE% %WHERE%',true);
query %FIELD%、%TABLE% %WHERE% SQL, :
%FIELD% field
%TABLE% table
%DISTINCT% distinct
%WHERE% where
%JOIN% join
%GROUP% group
%HAVING% having
%ORDER% order
%LIMIT% limit
%UNION% union
5

PHP5 ,ThinkPHP , :
getBy ,getByName,getByEmail
getFieldBy ,getFieldByName
top ( ) ,top8,top12
、getBy
。 ,User id,name,email,address , 。
  1. $user = $User->getByName('liu21st');
  2. $user = $User->getByEmail('[email protected]');
  3. $user = $User->getByAddress(' ');
, find select 。
、getFieldBy
  1. $user = $User->getFieldByName('liu21st','id');
name id 。
、top
ThinkPHP , N ( , )。 , 0, 5 :
  1. $User-> where('score>80')->order('score desc')->top5();
8 :
  1. $User-> where('score>80')->order('score desc')->top8();
5

, :
1、 select
select false , SQL, :
  1. //  SQL 
  2. $subQuery = $model->field('id,name')->table('tablename')->group('field')->where($where)->order('status')->select(false); 
2、 buildSql
  1. $subQuery = $model->field('id,name')->table('tablename')->group('field')->where($where)->order('status')->buildSql(); 
buildSql , SQL ( , SQL ), 。
  1. //   
  2. $model->table($subQuery.' a')->where()->order()->select() 
SQL TP , table where 。
2