하나의 레코드에서 여러 단어를 일치시키는 MySQL SELECT LIKE 또는 REGEXP
필드 table. name'Stylus 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에는 RLIKE연산자가 있으므로 쿼리는 다음과 같습니다.
SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus|2100'
나는 정규 표현식에서 그다지 강하지 않으므로 표현식이 괜찮기를 바랍니다.
편집
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%'
'Nice programing' 카테고리의 다른 글
| MSTest : 테스트가로드되지 않았거나 선택한 테스트가 비활성화 되었기 때문에 테스트가 실행되지 않습니다. (0) | 2020.11.26 |
|---|---|
| PuTTY를 사용하여 Windows에서 Linux에서 명령 실행 자동화 (0) | 2020.11.26 |
| Linq에서 목록으로 반환되는 결과 수 제한 (0) | 2020.11.26 |
| Visual Studio에서 다중 선택? (0) | 2020.11.26 |
| Firestore로 "객체 배열"을 업데이트하는 방법은 무엇입니까? (0) | 2020.11.26 |