2011-08-26 5 views
0

나는 웹 사이트에서 사용자가 mysql 데이터베이스에 저장된 값을 검색 할 수 있도록 검색 기능을 만들고있다.PHP를 사용하여 MySQL을 검색하는 방법, 사용자의 검색 문자열에 기능을 생성하는 방법 (및 또는하지 않음)

예 :

이 표에는 두 가지 제품이 있습니다.

하나는 설명 값이 "콜라 캔 330ml"이고 다른 하나는 "스프라이트 캔 330ml"입니다.

이제 이러한 항목을 검색 할 때 사용자가 문자열로 can을 입력한다고 가정 해보십시오. 모두 포함 할 수 있기 때문에 두 항목이 모두 표시됩니다.

사용자가 콜라를 입력하면 콜라가 반환 될 수 있습니다.

이제 모든 제품을 데이터베이스로 만들어서 모든 소다 음료를 마셨다 고 상상해보십시오.

이와 같은 검색 기능은 약간 골칫거리입니다. 사용자가 콜라와 스프라이트 캔 인 두 가지 제품 만 원한다고 가정 해보십시오.

그들은 같은 것을 검색 할 필요가있다 "콜라 나 스프라이트와 수 및 330ml의"이것은 단지 내 예제에서 사용 된 두 제품을 반환해야

.

내가 직면하는 문제는 아닙니다. 내 검색 기능은 원래 예제처럼 실행됩니다. 어떤 종류의 및/또는 기능을 포함 시키려고 시도하고 있으며 이것이 모두 어떻게 해결되어야하는지에 대해서는 아직 결정하지 않았습니다.

현재 "코카인 캔"은 코카인과 캔을 포함하는 결과 만 반환합니다. 그러나 "코카인 스프라이트 캔"을 검색 한 경우 문자열에 사용 된 단어 3 개를 모두 포함하는 결과가 없으므로 결과가 반환되지 않습니다.

$find = strtoupper($find); 
$find = strip_tags($find); 
$find = trim ($find); 
$_SESSION['find'] = $find; 
$keywords_array = explode(' ', $find); 

$find가 있습니다 : 여기

쿼리입니다 다음과 같이

$dataQuery = " 
     SELECT * 
     FROM `products` 
     WHERE upper(`desc`) 
     LIKE '%" 
      . implode("%' 
     AND upper(`desc`) 
     LIKE '%", 
      $keywords_array) 
      . "%' 
     ORDER BY `desc`"; 

$keywords_array가 검증 한 후 사용자가 입력 한 검색 문자열에서 구축 배열이며, 이것에 대한 코드입니다 문자열은 사용자가 입력 한 검색 문자열의 사후 값으로 설정됩니다.

누구든지 내가 설명 한 것을 성취하는 데 좋은 아이디어가 있습니까?

추가 코드가 필요하거나 더 나은 설명이 필요한 경우 그냥 물어보십시오!

감사합니다.

+1

MyISAM 테이블을 사용하는 경우 "코크스 또는 스프라이트 + 캔"형식의 구문을 자연어 검색 할 수있는 전체 텍스트 색인을 사용하십시오. –

답변

1

mysql fulltext search은 기본 최소 단어 길이가 4 자임을 감안하여 서버 구성을 편집 할 수없는 경우 "can"을 검색 할 수 없습니다.

또한 전체 데이터의 50 % 이상에 나타나는 단어에 대한 결과를 제공하지 않는 "스톱 워드"정책이 있습니다.

+0

안녕하세요, 감사합니다. 그것은 대답 인 것 같습니다.전체 텍스트를 사용하기 위해 검색어를 다시 형식화해야하는 방법에 대한 예를 들어 줄 수 있습니까? –

+0

@Black 간단한 예 :'SELECT * FROM products MATCH (desc) AGAINST ('콜라 스프라이트'330ml 'BOOLEAN MODE)' –

관련 문제