2014-02-26 4 views
1

PHP, PDO 확장 및 MySQL을 기본 DBMS로 사용하고 있습니다. 또한 데이터베이스에 두 개의 idtag 열이있는 준비된 태그 테이블이 있습니다.문자열에서 태그를 추출하는 방법

내 목적은 "태그 테이블에있는 문자열에서 자동으로 일치하는 태그를 추출"이고 내 문제는이를 수행하기 위해 PDO 쿼리를 만들고 있습니다.

예를 들어 문자열이 "비싸고 고품질 컴퓨터 하드웨어"인 경우 3 자 미만의 단어를 제거한 후 SELECT id FROM tags WHERE tag LIKE %Expensive%And%High%Quality%Computer%;과 같은 검색어를 실행하면 "비싼"또는 "컴퓨터"와 같은 리터럴 태그는 절대로 실행되지 않습니다. 녹이다! 과 같은 쿼리를 실행해도 "고품질"또는 "비싼 하드웨어"와 같은 태그는 포함되지 않습니다.

이 쿼리는 각 문자열마다 한 번 실행되며이 경우 처리 시간은 중요하지 않습니다.

미리 감사드립니다. 내 잘못에 대해 사과드립니다. 당신이 태그 = '하드웨어'와 같은 단어를 정확한로 검색을 제한하고 쿼리에서

SELECT id FROM tags WHERE tag LIKE '%expensive%' OR tag LIKE '%and%' OR tag LIKE '%high%' OR tag LIKE '%quality%' OR tag LIKE '%computer%' OR tag LIKE '%hardware%'; 

:

+0

그건 어떻게 % '작품들과 함께 'OR'을 묶는 것은 큰 데이터 세트에서 꽤 고통 스럽습니다. – tadman

답변

1

거의 들었습니다. 각 용어 주위에 와일드 카드를 넣으면됩니다.

SELECT id 
FROM tags 
WHERE tag='%expensive%' 
    OR tag='%high%' 
    OR tag='%quality%' 
    OR tag='%computer%' 
    OR tag='%hardware%'; 

"and"는 제외 시켰습니다. "% and %"는 "sandy" "bland" "grandiose"등과 같은 많은 것들과 일치 할 것이기 때문에 문자열 길이를 검사하고 아무 것도 사용하지 않기를 원할 것입니다.

+0

Thanx @ digital-chris하지만 여전히 작은 문제가 있습니다. 이 결과에는 "값 비싼 도구"와 같은 태그가 포함될 것입니다. 그리고 이것은 내가 실제로 예상 한 것이 아닙니다! – DarkMaze

+0

"비싼 도구"와 "값 비싼 컴퓨터"는 나쁜 태그이고 단지 "도구"와 "컴퓨터"라고 태그 달기를 제안합니다 –

+0

예, 저는 동의합니다.하지만이 태그는 내 costumer에 의해 수집 된 것입니다. 그들을 필터링하는 시간. 주어진 단어 만 포함하는 다중 리터럴 태그를 선택하기 위해이 결과를 제한 할 수있는 방법이 있습니까 – DarkMaze

0

난 당신이 뭔가를 사용할 수 있다고 생각합니다. 이것은 값 비싼 하드웨어와 일치하지 않습니다.

관련 문제