>  기사  >  백엔드 개발  >  ThinkPHP--SQL 쿼리 문

ThinkPHP--SQL 쿼리 문

WBOY
WBOY원래의
2016-08-08 09:31:201274검색

1. 쿼리 방법

ThinkPHP는 문자열 조건 쿼리, 인덱스 배열 조건 쿼리, 개체 조건 쿼리의 세 가지 기본 쿼리 방법을 제공합니다. 대부분의 경우 인덱스 배열과 객체를 쿼리 조건으로 사용하는 것이 더 안전하기 때문에 권장됩니다
1. 문자열을 조건 쿼리로 사용
//Strings를 조건 쿼리로
$user = M( 'User ');
var_dump($user->where('id=1 AND user="짱구는짱"')->select());
//최종 생성된 SQL 문
SELECT * FROM `think_user` WHERE ( id=1 AND user="Crayon Shin-Chan" )
PS: 여기서 쿼리 방법은 조건, 여러 조건 및 AND와 같은 커넥터만 포함하면 됩니다.
SQL 일관성 작업에 대해 자세히 알아 보겠습니다.
2. 인덱스 배열을 쿼리 조건으로 사용
//인덱스 배열을 조건 쿼리로 사용
$user = M('User');
$condition['id'] = 1;
$condition['user'] = '크레용신짱';
var_dump($user->where($condition)->select());
//최종 생성된 SQL 문
SELECT * FROM `think_user` WHERE ( `id` = 1 ) AND ( `user` = 'Crayon Little
New' )
PS: 인덱스 배열 쿼리의 기본 논리 관계는 AND입니다. OR로 전환하려면 _logic을 사용하여 쿼리 논리를 정의할 수 있습니다.
위 코드를 기반으로 다음 줄을 추가합니다.
$condition['_logic'] = 'OR'; //기본 AND를 OR로 변경
3.객체 메서드를 사용하여 쿼리합니다.
//조건으로 개체 쿼리
$user = M('User');
$condition = new stdClass();
$condition->id = 1;
$condition-> ;user = '짱구는 못말려';
var_dump($user->where($condition)->select());
//최종 생성된 SQL 문
SELECT * FROM `think_user ` WHERE ( ` id` = 1 ) AND ( `user` = 'Crayon Little
New' )
PS: stdClass 클래스는 PHP에 내장된 클래스이며 여기서는 빈 클래스로 이해될 수 있습니다. 이는 조건부
필드가 stdClass 클래스에 멤버로 저장된다는 의미로 이해할 수 있습니다. 여기서 ''는 네임스페이스를 루트 디렉터리로 설정하는 것입니다. 그렇지 않으면
이 클래스는 현재 디렉터리에서 찾을 수 없습니다. 개체 및 배열 쿼리를 사용하면 효과가 동일하며 서로 바뀔 수 있습니다. 대부분의 경우
ThinkPHP에서는 보다 효율적으로 배열 형식을 사용할 것을 권장합니다.

2. 표현식 쿼리
보다 큼, 같음, 작음과 같은 SQL 쿼리와 같이 퍼지 판단이 필요한 쿼리에는 테이블

표현식 쿼리 방법을 사용할 수 있습니다.

쿼리 표현식 형식: $map['필드 이름'] = array('표현식','쿼리 조건');
표현식 쿼리 테이블
표현식 의미
EQ는 (= )
NEQ는 (<>)와 같지 않습니다
GT는 다음보다 큼(>)
EGT는 다음보다 크거나 같습니다(>=)
LT는 다음보다 작습니다(<).
ELT는 (< ;=)보다 작거나 같습니다.
[NOT]LIKE 퍼지 쿼리
[NOT] BETWEEN(아님)간격 쿼리
[NOT] IN(아님)IN 쿼리
EXP 표현식 쿼리, SQL 구문 지원
PS: 표현식은 대소문자를 구분하지 않습니다.
//EQ: 같음 (=)
$map['id'] = array('eq', 1); //여기서 id=1
//NEQ: 같지 않음( <>)
$map['id'] = array('neq', 1); //id는 1입니다
//GT: 보다 큼(>)
$map[ 'id'] = array('gt', 1); //id>1
//EGT: (>=)
$map['id' ] = array('egt ', 1); //id>=1
//LT: 보다 작음 (<)
$map['id'] = array('lt', 1 ); //id<1
//ELT: (<=)
$map['id'] = array('elt', 1)보다 작거나 같음 id<=1
//[ NOT]LIKE: 퍼지 쿼리
$map['user'] = array('like', '%작은%') //여기는 %작은%
//[NOT]LIKE: 퍼지 쿼리
$map['user'] = array('notlike', '%작은%') //여기서 %작은%
//[NOT ]LIKE: 퍼지 쿼리의 배열 방법
$map['user'] = array('like', array('%작은%', '% Wax%'), 'AND');
// 생성된 SQL
SELECT * FROM ` think_user` WHERE ( (`user` LIKE '%작은%' AND `user`
LIKE '%wax%') )
//[NOT] BETWEEN: 간격 쿼리
$map['id' ] = array('between','1,3');
//'id'는 '1'과 '2' 사이에 있습니다.
//위와 동일 및 이에 상응하는
$map['id' ] = array('between',array('1','3'));
//[NOT] BETWEEN: 간격 쿼리
$map[' id'] = array('not between', '1,3');
//여기서 `id`는 '1'과 '2' 사이가 아닙니다
//[NOT] IN: 간격 쿼리
$map['id'] = 배열 ​​('in','1,2,4');
//`id`는 IN ('1','2','4')
//[NOT] IN: 간격 쿼리
$map['id'] = array('not in','1,2,4');
//`id`가 NOT IN인 곳 ('1','2','4')
//EXP: 사용자 정의
$map['id'] = array('exp','in (1,2,4)');
//where is `id` NOT IN ('1','2','4')
PS: exp를 사용하여 두 번째 매개변수에 where 문을 사용자 정의하고 직접 작성합니다
//EXP : OR 문을 추가하도록 사용자 지정
$map['id'] = array('exp', '=1');
$map['user'] = array('exp', '=" 크레용신짱"');
$map['_logic'] = 'OR';
//WHERE is ( (`id` =1) ) OR ( (`user` =" 크레용신- 짱") )

3. 빠른 쿼리
단축 쿼리 방식은 다중 필드 쿼리를 작성하는 단순화된 방법으로, 여러 필드를 '|'로 구분하여 OR을 나타내고, '&'
를 사용하여 여러 필드를 구분하여 AND를 나타냅니다.
1. 다른 필드에 동일한 쿼리 조건
//동일한 쿼리 조건 사용
$user = M('User');
$map['user|eemail'] = 'a' ; / /'|'는 '&'로 대체되어 AND
var_dump($user->where($map)->select());
2. 🎜>// 다른 쿼리 조건 사용
$user = M('User');
$map['id&user'] = array(1,'크레용신짱','_multi'=>true );
var_dump($user->where($map)->select());
PS: id를 1로, user를 '짱구짱'으로 만들려면 '_multi'를 true로 설정하세요. ', 그렇지 않으면
ID가 1에 해당하고 '짱구는 신짱'에도 해당하는 상황이 발생하게 됩니다. 또한 이 설정은 배열의 끝에 배치되어야 합니다.
//빠른 쿼리와 결합된 표현식 지원
$user = M('User');
$map['id&user'] = array(array('gt', 0),'Crayon Little New ','_multi'=>true);
var_dump($user->where($map)->select());

IV. 간격 쿼리

ThinkPHP는 특정 필드에 대한 간격 쿼리를 지원합니다.

//간격 쿼리
$user = M('User');
$map['id'] = array(array('gt', 1), array('lt', 4) );
var_dump($user->where($map)->select());
//세 번째 매개변수는 논리 OR
$user = M('User') $map['id'] = array(array('gt', 1), array('lt', 4), 'OR');
var_dump($user->where($map ) ->select());

5. 결합 쿼리
결합 쿼리는 인덱스 배열 쿼리 방식을 기반으로 인덱스 배열을 사용하므로 문자열 쿼리(_string), 복합

복합 쿼리(_complex), 요청 문자열 쿼리(_query)를 추가한 쿼리입니다. , 중복된 항목을 덮어쓰게 됩니다.

//문자열 쿼리(_string)
$user = M('User');
$map['id'] = array('eq', 1);
$map[ ' _string'] ='user="크레용신찬" AND email="xiaoxin@163.com"';
var_dump($user->where($map)->select());
//문자열 쿼리 요청(_query)
$user = M('User');
$map['id'] = array('eq', 1);
$map[' _query '] ='user=크레용신찬&email=xiaoxin@163.com&_logic=OR';
var_dump($user->where($map)->select());
PS: 이 첫 번째 방법은 따옴표가 필요 없는 URL 방식입니다.
//복잡한 쿼리(_complex)
$user = M('User');
$where['user'] = array('like', '%작은%');
$where['id'] = 1;
$where['_logic'] = 'OR';
$map['_complex'] = $where;
$map['id'] = 3;
$map['_logic'] = 'OR';
var_dump($user->where($map)->select());
PS: 복합 쿼리를 구성할 수 있습니다. more 복잡한 쿼리의 경우 id=1 또는 id=3을 구현할 수 있습니다.

6. 통계 쿼리
ThinkPHP는 데이터의 통계 쿼리를 위한 몇 가지 방법을 제공합니다.

//총 데이터 항목 수

$user = M('User');
var_dump($user->count());
//총 필드 수, NULL 발생 통계 없음
$user = M('User');
var_dump($user->count('email'));
//최대값
$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'));

7. 동적 쿼리
ThinkPHP는 PHP5 언어의 기능을 이용해 동적 쿼리를 구현합니다.

1.getBy 동적 쿼리

//email=xiaoin@163.com의 데이터 찾기
$user = M('User');
var_dump($user->getByemail(' xiaoxin @163.com'));
2.getFieldBy 동적 쿼리
//user를 통해 해당 id 값 가져오기
$user = M('User');
var_dump($user- > ;getFieldByUser('Luffy', 'id'));

8. SQL 쿼리
ThinkPHP는 기본 SQL 쿼리를 지원합니다.

1.쿼리 읽기

//쿼리 결과 집합, 분산 읽기 및 쓰기 분리를 사용하는 경우 항상 읽기 서버에서 실행됩니다.
$user = M('User');
var_dump($user ->query('SELECT * FROM think_user'));
2.execute write
//업데이트 및 쓰기, 분산 읽기-쓰기 분리를 사용하는 경우 항상 다음에서 실행됩니다. 쓰기 서버
$ user = M('User');
var_dump($user->execute('UPDATE think_user set user="Crayon Daxin" WHERE
id=1'));
PS: 하위로 인해 쿼리는 일관성 있는 작업을 많이 사용합니다. 이에 대해서는 일관성 있는 작업에서 설명하겠습니다.

위 내용은 ThinkPHP-SQL 쿼리문을 관련 내용과 함께 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.