2011-10-21 2 views
1

문자열 내에서 단어를 검색하는 쿼리에 뭔가를 넣을 수 있는지 궁금합니다. 예를 들어, user_purchased라는 필드가있는 경우이를 쿼리하고 'dog'라는 단어가 문자열 내에있는 레코드 만 가져옵니다.문자열에서 값을 찾는 mysql 쿼리

나는 내가 대신 쿼리 자체에서이 작업을 수행 할 수 있습니다 궁금 이것은 아마도 성능을 향상 것이라고 해요, 난이

(!stristr($row['user_purchased'], 'dog')) 

처럼 PHP를 사용하여 수행 할 수 있습니다 알고 있지만. 이

+0

'LIKE '% foo %''또는'INSTR'과 관련된 모든 대답이 강제로 전체 스캔을 수행한다는 것을 명심하십시오. 테이블이 크면 느려질 것입니다. 그들은 인덱스 룩업을 할 수 없다. – derobert

+0

내가 속도를 최대화하고 싶다면 무엇을 대신 사용할 지 고마워. 내 테이블이 너무 커서 속도가 문제가됩니다. –

+0

속도가 중요한 경우 MySQL 전체 텍스트 또는 스핑크스와 같은 인덱싱 솔루션이 필요합니다. – derobert

답변

1

에서 MySQL의 설명서에서

견적 당신은 LIKE를 사용할 수 있습니다 :

WHERE your_col LIKE '%dog%' 

더 나은 성능을 원하면 full text search. FULLTEXT 인덱스를 사용하여 일치하는 행을 빠르게 찾습니다.

+0

감사합니다.이 말이 맞습니다. 어떻게 내가 그 단어 dog가 없었던 결과를 찾기 위해 이것을 바꿀 것인가? –

+1

이것을 알아 내고, 좋지 않은 것을 사용하십시오. –

0

MySQL의에서 사용할 수 INSTR에 도움에 미리

감사 (STR, SUBSTR) http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_instr

INSTR(str,substr) 

Returns the position of the first occurrence of substring substr in string str. This is the same as the two-argument form of LOCATE(), except that the order of the arguments is reversed. 

mysql> SELECT INSTR('foobarbar', 'bar'); 
     -> 4 
mysql> SELECT INSTR('xbar', 'foobar'); 
     -> 0 
This function is multi-byte safe, and is case sensitive only if at least one argument is a binary string. 
0

SELECT * FROM 테이블 WHERE user_purchased LIKE '% dog %';

관련 문제