퍼지 쿼리 방법: 1. SQL 일치 패턴을 사용하고 연산자는 "LIKE" 또는 "NOT LIKE"를 사용합니다. 일치 시 대소문자를 구분하지 않습니다. 2. 정규식 일치 패턴을 사용하고 연산자는 "REGEXP"를 사용합니다. " 또는 "NOT REGEXP"인 경우 정규식은 일치하는 필드의 어느 곳에나 나타날 수 있습니다.
이 튜토리얼의 운영 환경: windows7 시스템, PHP7.1&&mysql8 버전, Dell G3 컴퓨터.
웹사이트를 구축할 때 웹사이트에서 특정 리소스를 찾기 위해 키워드를 사용하는 기능을 자주 사용합니다. 이때 퍼지 쿼리를 사용해야 하는 경우가 많습니다. 오늘은 PHP의 퍼지 쿼리(fuzzy query)에 대해 알아보았습니다. 이제 정리해 보겠습니다.
위는 퍼지 쿼리의 흐름도입니다.
시연의 편의를 위해 간단한 데이터베이스 테이블을 생성해야 합니다.
KEY ‘username’(‘username’)
은 매우 중요한 지표입니다.
인덱스의 장점: 특정 조건에 따라 데이터를 검색할 경우 조건 필드가 인덱싱되지 않으면 쿼리 중에 테이블 전체를 순회하게 됩니다. 인덱스를 생성하면 해당 인덱스를 기반으로 쿼리가 수행됩니다. . 이는 쿼리 성능을 향상시킵니다.
반환된 결과는 단 하나의 SQL 쿼리입니다
응용 시나리오: 사용자 등록 로그인
반환 결과가 불확실합니다
응용 시나리오: 사이트 검색
참고: 위 쿼리 2개 반환된 결과가 비어 있을 수 있습니다.
퍼지 쿼리 기술은 2가지 일치 형식을 지원합니다: 1. SQL 일치 모드(개발에서 가장 많이 사용되는 모드) 2. 정규식 일치 모드(권장하지 않음)
SQL 일치 모드
1. 일치 모드에서는 = 또는 != 연산자를 사용할 수 없지만 LIKE 또는 NOT LIKE
2를 사용합니다. SQL 일치 모드를 사용하면 MYSQL은 2개의 와일드카드 문자를 제공합니다. %는 모든 문자(0 포함)를 나타냅니다. _는 단일 문자를 나타냅니다.
3. 일치 형식에 위의 2개 와일드카드 문자가 포함되지 않은 경우 SQL 일치 모드를 사용합니다. 쿼리 효과는 = 또는 !=;
4와 같습니다. 기본적으로 대소문자를 구분하지 않는 SQL 일치 모드를 사용합니다.
5가지 쿼리 시나리오
① #사용자 이름이 특정 문자로 시작하는 사용자 쿼리
#사용자 이름이 'l' 문자로 시작하는 사용자 쿼리 # l%
SELECT * FROM user WHERE user WHERE username LIKE 'l %';
② #사용자 이름이 특정 문자로 끝나는 사용자 쿼리
#사용자 이름이 특정 문자 'e'로 끝나는 사용자 쿼리 #%e
SELECT * FROM user WHERE user WHERE username LIKE '%e';
3#사용자 이름에 특정 문자가 포함된 사용자 쿼리
# 사용자 이름에 'o' 문자가 포함된 사용자 쿼리 # %o%
SELECT * FROM user WHERE 사용자 이름 LIKE '%o%'(일반적으로 사용됨)
SELECT * FROM user WHERE user WHERE username LIKE '___';
⑤# 두 개의 와일드카드 조합
#다음을 가진 사용자 쿼리 두 번째 문자는 o
# _o%
SELECT * FROM user WHERE username LIKE '_o%';
정규 표현식 일치 패턴(더 이상 사용되지 않음)
와일드카드 .
[ABC]는 문자 A B 또는 C와 일치합니다. [A-Z]는 모든 문자와 일치합니다. [0-9]는 모든 숫자와 일치합니다.
* [0-9]* 모든 숫자와 일치
[a-z]* 임의 개수의 문자와 일치 ^ 특정 문자 또는 문자열로 표현됩니다. 시작 ^ a는 문자 A를 나타냅니다. a의 끝 문자 또는 문자열 s$는 문자 s로 끝나는 것을 의미합니다. 정규식 일치 패턴에 사용된 연산자를 사용하세요)
정규식을 사용하여 일치시키면 패턴이 SQL 패턴과 다릅니다 REGEXP
或 NOT REGEXP
(RLIKE
或NOT RLIKE
#사용자 이름이 정확히 3자인 사용자 쿼리
SQL 일치 패턴 ___
모든 사용자에게 쿼리를 보내는 이유는 무엇인가요? 정규식은 패턴과 일치하므로 정규식이 일치하는 필드의 아무 곳에나 나타나면 패턴이 일치합니다. 따라서... 세 글자 이상을 포함하는 사용자 이름과 일치하고 테이블의 모든 사용자 이름이 일치하므로 모든 사용자가 쿼리됩니다.
참고:
일치에 와일드카드만 사용하는 경우 N개의 와일드카드가 있습니다. 그러면 일치하는 패턴은 N자보다 크거나 같음을 의미합니다. 정확한 문자 수를 표현하고 싶다면 형식은 다음과 같습니다. ^...$
SELECT * FROM user WHERE username REGEXP '^...$';
추천 학습:
php video 튜토리얼
위 내용은 PHP에서 퍼지 쿼리를 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!