MySQL에서 "전체 단어 일치"검색
텍스트 필드에서 키워드를 검색하는 SQL 쿼리를 작성하고 싶지만 "전체 단어 일치"인 경우에만 해당됩니다 (예 : "rid"를 검색 할 때 "arid"와 일치하지 않지만 "Remove"와 일치합니다.
MySQL을 사용하고 있습니다.
많은 것이 응용 프로그램에서는 성능이 중요하지 않습니다 데이터베이스 크기와 크기가 모두 편안하게 작지만 PHP를 구동하는 것보다 SQL에서 수행하는 것이 좋습니다.
당신은 사용할 수 있습니다 . 및 단어 경계 마커 :REGEXP
[[:<:]]
[[:>:]]
SELECT *
FROM table
WHERE keywords REGEXP '[[:<:]]rid[[:>:]]'
고전적인 단어 경계 [[::<::]]
가 특수 문자 (예 :. @ # $ % ^ & *)와 충돌 하는 것을 방지하는 답을 찾았습니다 .
바꾸다 ..
SELECT *
FROM table
WHERE keywords REGEXP '[[:<:]]rid[[:>:]]'
이것으로 ..
SELECT *
FROM table
WHERE keywords REGEXP '([[:blank:][:punct:]]|^)rid([[:blank:][:punct:]]|$)'
후자는 일치 (공백, 탭 등) || (쉼표, 대괄호 등) || 줄의 시작 / 끝. 더 '완성 된'단어 경계 일치.
like
와일드 카드 마커와 함께 사용 하여 가능성 (시작, 끝, 중간 및 단독)을 사용할 수 있습니다 . 다음과 같은 충분합니다.
blah blah blah where 'rid %'와 같은 열 또는 '% rid'와 같은 열 또는 '% rid %'와 같은 열 또는 column = 'rid'
경계와 함께 regexp를 사용하지만 악센트를 구분하지 않는 검색도 원할 경우 REGEXP는 단일 문자 연산자 단어 utf8_general_ci 데이터 정렬을 의미하지 않습니다. 일치는 악센트를 구분하지 않습니다.
악센트를 구분하지 않고 전체 단어를 일치 시키려면 (더 이상 사용하지 않는) PHP 함수 sql_regcase ()와 동일한 방식으로 단어를 지정하십시오.
사실로 :
utf8_general_ci를 사용하면 대소 문자를 동일하게 (WHERE = 값) 검색 할 수있는 단어 일치를 줄 수는 없습니다 (단어 경계가 인식되지 않습니다).
LIKE는 대소 문자를 구분하지 않는 검색을 허용하지만 가능한 단어 경계 문자의 모든 조합을 수동으로 지정해야합니다 (단어 마커는 인식되지 않는 경계 경계).
단어 경계 [[: <:]] 및 [[:> :]]는 단일 바이트 함수 인 REGEXP에서 지원되지 않는 악센트를 구분하지 않는 것에서 수행하지 않습니다.
해결은 단어 경계와 함께 REGEXP를 사용하고 sql_regcase가 수행하는 방식으로 수정 된 단어를 사용하는 것입니다.
에 사용 http://www.nonsolodiete.it
select * from table where Locate('rid ', FieldToSearch) > 0
or Locate(' rid', FieldToSearch) > 0
이는 앞뒤에 공백이있는 곳을 찾는 것을 처리 할, 접근 방식을 확장 할 수 있습니다. 우아하지만 보안관.
이것이 제가 지금까지 생각 해낸 최고의 답변입니다.
SELECT * FROM table
WHERE keywords REGEXP '^rid[ $]' OR keywords REGEXP ' rid[ $]'
나는 그것을 다음과 같이 단순화 것입니다.
SELECT *
FROM table
WHERE keywords REGEXP '[^ ]rid[ $]'
그러나 [^]는 "줄 시작 또는 공백"이 아니라 "공백이 아님"이라는 특별한 의미를 갖습니다.
REGEXP는 LIKE 조건과 어떻게 비교 검증? (이 앱에서는 성능이 중요하지 않습니다.)
참고 URL : https://stackoverflow.com/questions/656951/search-for-whole-word-match-in-mysql
'ProgramingTip' 카테고리의 다른 글
pandas.qcut과 pandas.cut의 차이점은 무엇입니까? (0) | 2020.11.03 |
---|---|
Visual Studio Code 상태 표시 줄 색상 (0) | 2020.11.03 |
URL에서 HTTP 응답 코드를 얻는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.03 |
악용 가능한 C # 함수 (0) | 2020.11.03 |
Twitter Bootstrap 텍스트 필드의 높이가 너무 작습니까? (0) | 2020.11.03 |