programing

MySQL SELECT LIKE 또는 REGEXP를 사용하여 하나의 레코드에서 여러 단어를 일치시킵니다.

randomtip 2022. 12. 31. 18:16
반응형

MySQL SELECT LIKE 또는 REGEXP를 사용하여 하나의 레코드에서 여러 단어를 일치시킵니다.

필드table.nameStylus Photo 2100'이 포함되어 있으며 다음과 같은 질문이 있습니다.

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus 2100%'

아무 결과도 없어요.물론 내가 검색하면 할 것이다.

SELECT `name` FROM `table` WHERE `name` LIKE '%Photo 2100%'

Stylus 2100'을 검색하여 레코드를 선택하려면 어떻게 해야 합니까?

감사해요.

말 순서를 안다면..다음을 사용할 수 있습니다.

SELECT `name` FROM `table` WHERE `name` REGEXP 'Stylus.+2100'

다음 항목도 사용할 수 있습니다.

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%' AND `name` LIKE '%2100%'

가장 좋은 해결책은 정규 표현을 사용하는 것이라고 생각합니다.가장 깨끗하고 아마 가장 효과적일 거예요.정규 표현은 일반적으로 사용되는 모든 DB 엔진에서 지원됩니다.

MySql에는RLIKEoperator는 다음과 같은 쿼리를 제공합니다.
SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus|2100'
제가 regexp를 잘 못해서 표현이 괜찮았으면 좋겠어요.

편집
RegExp는 다음과 같습니다.

SELECT * FROM buckets WHERE bucketname RLIKE '(?=.*Stylus)(?=.*2100)'

MySql regexp 지원에 대한 자세한 내용:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp

각 공간을 다음과 같이 바꿀 수 있습니다.%

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%2100%'

올바른 솔루션은 풀텍스트 검색(사용 가능한 경우) https://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html입니다.

이것은 거의 당신이 원하는 것을 할 수 있습니다.

SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100)+.*(Stylus|2100)+';

SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*';

그러나 이 또한 "210021002100"과 매치되어 좋지 않습니다.

이런 걸 해야 되는데

SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus.*2100';

또는

SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus)+.*(2100)+';

검색 결과가 다음과 같다고 가정합니다.stylus photo 2100. 다음 예제를 사용해 보십시오.RLIKE.

SELECT * FROM `buckets` WHERE `bucketname` RLIKE REPLACE('stylus photo 2100', ' ', '+.*');

편집

또 다른 방법은FULLTEXT에 색인을 붙이다.bucketname그리고.MATCH ... AGAINST의 구문SELECT진술.위의 예를 다시 쓰려면...

SELECT * FROM `buckets` WHERE MATCH(`bucketname`) AGAINST (REPLACE('stylus photo 2100', ' ', ','));
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus % 2100%'

언급URL : https://stackoverflow.com/questions/9099469/mysql-select-like-or-regexp-to-match-multiple-words-in-one-record

반응형