programing

MySQL - LIKE를 사용하여 정확한 단어 일치를 검색하는 방법?

kingscode 2023. 8. 29. 21:32
반응형

MySQL - LIKE를 사용하여 정확한 단어 일치를 검색하는 방법?

이 쿼리를 사용하여 데이터를 선택합니다.

mysql_query("SELECT * FROM products WHERE product_name LIKE '%".$search."%'");

유일한 문제는 가끔 제가 원하는 것보다 더 많은 것을 선택한다는 것입니다.

예를 들어, "BLA" 제품을 선택하고 싶은데, 제 쿼리는 "BLALA" 제품도 선택합니다.확실히 말하자면, 제가 "제품 1"을 선택하고 싶다면, 저는 "제품 11"을 선택하는 쿼리를 원하지 않습니다.

그걸 어떻게 관리하는지 아는 사람?

감사해요.

단어 경계만 검색하시겠습니까?그렇다면 조잡한 버전은 다음과 같습니다.

SELECT * FROM products WHERE product_name LIKE "% foo %";

아니면 당신은 조금 더 똑똑해지고 다음과 같은 단어의 경계를 찾을 수 있습니다.REGEXP

SELECT * FROM products WHERE product_name RLIKE "[[:<:]]foo[[:>:]]";

구글에서 이 질문을 발견했습니다. 그래서 저는 몇몇 사람들이 여전히 이것을 발견할 수도 있다고 생각합니다. 그래서 여기 제 꽤 무례한 시도가 있습니다.

SELECT * FROM products
WHERE product_name LIKE 'BLA %' #First word proceeded by more words
OR WHERE product_name LIKE '% BLA' #Last word preceded by other words
OR WHERE product_name LIKE '% BLA %' #Word in between other words
OR WHERE product_name = 'BLA'; #Just the word itself

효율성에 대해 확신할 수 없거나 모든 경우에 적용되는지 여부를 판단할 수 없으므로, 정말 비효율적이거나 너무 비우호적인 경우에는 언제든지 반대표를 던지십시오.

정규식을 사용해 보십시오.

SELECT 
    *
FROM
    `products`
WHERE
    product_name regexp '(^|[[:space:]])BLA([[:space:]]|$)';
SELECT  *
FROM    products
WHERE   product_name = 'BLA'

정확하게 선택합니다.BLA

SELECT  *
FROM    products
WHERE   product_name LIKE 'BLA%'

을 선택합니다.BLADDER그리고.BLACKBERRY하지만 아닙니다.REBLAND

선택하기BLA문자열의 첫 번째 단어로 다음을 사용합니다.

SELECT  *
FROM    products
WHERE   product_name RLIKE '^Bla[[:>::]]'
        AND product_name LIKE 'Bla%'

두 번째 조건은 인덱스가 있는 경우 쿼리 성능을 향상시킬 수 있습니다.product_name.

제거한다.LIKE키워드 및 사용=정확히 일치하는

편집

mysql_real_message_string을 사용하여 사용자 입력을 피하는 것을 잊지 마십시오. 그렇지 않으면 누군가 입력 상자 안에 따옴표를 입력하면 쿼리가 실패합니다.

$search=mysql_real_escape_string($search);
mysql_query("SELECT * FROM products WHERE product_name='".$search."'");

그럼 LIKE를 사용하지 말고 평등을 검색해보세요.

예를

mysql_query("SELECT * FROM products WHERE product_name = '".$search."'");

참고로 $search를 쿼리에 사용하기 전에 sanitize/escape 해주시기 바랍니다.

당신은 가능한 모든 옵션을 커버할 수 있습니다.

SELECT 
    * 
FROM 
    `products` 
WHERE
    `product_name` like 'BLA' -- Column cointains just that word
    OR `product_name` like 'BLA %' -- The word appears at the beginning
    OR `product_name` like '% BLA' -- The word appears at the end
    OR `product_name` like '% BLA %'; -- The word appears in the middle

등호(=)를 사용하시겠습니까?

mysql_query("SELECT * FROM products WHERE product_name = '".$search."'"); 

정확한 단어를 일치시키려면 사용하지 마십시오.LIKE.

편집: 그러면 상황이 좀 정리됩니다.검색어 뒤에 공백을 추가하면 됩니다.또는 항상 검색어에 하이픈(-)을 추가할 수도 있습니다.

mysql_query("SELECT * FROM products WHERE product_name LIKE '".$search." -%'"); 

쿼리에서 정규식 사용 시도

mysql_query("SELECT * FROM products WHERE product_name regexp '".$search."'");

다음을 사용하여 MySql에서 정확한 단어 일치를 검색하려면LIKE그런 다음 다음을 사용합니다.

SELECT * FROM tableName WHERE columnName LIKE 'your_query' ; 

라라벨 웅변술에서는 다음과 같이 할 수 있습니다.

Category::where('name', 'RLIKE ', "[[:<:]]"$words"[[:>:]]");

원시 쿼리에서는 다음과 같이 검색할 수 있습니다.

SELECT * FROM categories WHERE name RLIKE "[[:<:]]categoryNameHere[[:>:]]";

당신은 이렇게 선택 쿼리를 사용할 수 있습니다. 저는 케이크에도 사용합니다.PHP와 그것은 도움이 됩니다.

Select * from `users` where username COLLATE latin1_general_cs LIKE '%$email%'

언급URL : https://stackoverflow.com/questions/5743177/mysql-how-to-search-for-exact-word-match-using-like

반응형