복붙노트

[SQL] PHP SQL SELECT 경우 여러 단어 검색 항목과 같은

SQL

PHP SQL SELECT 경우 여러 단어 검색 항목과 같은

나는 어디 다음과 검색 폼에 대한 쿼리와 같은 선택이 있습니다

<?php 
$bucketsearch = sanitizeone($_POST["bucketsearch"], "plain");
$bucketsearch = strip_word_html($bucketsearch);
?>

 if(isset($_POST['search'])){
                  $result=MYSQL_QUERY( "SELECT * FROM buckets where bucketname like '%$bucketsearch%' order by bucketname");
              }else{
              $result=MYSQL_QUERY( "SELECT * FROM buckets order by bucketname");
          }

내 문제는 누군가를 검색 "사과와 배"에 대한 예를 들어 내가 어떤 단어가 포함 된 결과를 얻을 수없는 경우, 난 단지 그것의 모든 단어 결과 (물론 한 결과)을 반환 할 수 있다는 것입니다.

날이 더 다양한 비트를 검색 할 수 있습니다 누구의 도움? 미리 감사드립니다.

해결법

  1. ==============================

    1.당신은 원하는 오히려 정확한 문자열보다, 각각의 단어를 입력하여 검색 그래서? 이 같은 Howabout 일 :

    당신은 원하는 오히려 정확한 문자열보다, 각각의 단어를 입력하여 검색 그래서? 이 같은 Howabout 일 :

    $searchTerms = explode(' ', $bucketsearch);
    $searchTermBits = array();
    foreach ($searchTerms as $term) {
        $term = trim($term);
        if (!empty($term)) {
            $searchTermBits[] = "bucketname LIKE '%$term%'";
        }
    }
    
    ...
    
    $result = mysql_query("SELECT * FROM buckets WHERE ".implode(' AND ', $searchTermBits).");
    

    이것은 당신에게 같은 쿼리를 줄 것이다 :

    SELECT * FROM buckets WHERE bucketname LIKE '%apple%' AND bucketname LIKE '%and%' AND bucketname LIKE '%pear%'
    

    에 AND를 변경하거나 검색어의 어떤보다는 모두 일치 할 경우. 또한 개선은 더 나은 결과를 제공하기 위해 같은 일부 중지 단어를 정의 '와'포함 할 수있다.

  2. ==============================

    2.나는 최선의 해결책은 정규 표현식을 사용하는 것입니다 생각합니다. 그것은 깨끗한 아마도 가장 효과적입니다. 정규 표현식은 모두 일반적으로 사용되는 DB 엔진에서 지원됩니다.

    나는 최선의 해결책은 정규 표현식을 사용하는 것입니다 생각합니다. 그것은 깨끗한 아마도 가장 효과적입니다. 정규 표현식은 모두 일반적으로 사용되는 DB 엔진에서 지원됩니다.

    쿼리가 같은 것 때문에 MySQL의에서 RLIKE 연산자가있다 :

    SELECT * FROM buckets WHERE bucketname RLIKE "(?=.*apple)(?=.*and)(?=.*pear)"
    

    Did't, 내 표현이 바로 MySQL의 정규 표현식 "방언"을위한 희망을 그것을 테스트.

    MySQL의 regexp와 지원에 대한 자세한 : http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp

  3. ==============================

    3.여기 간단한 예를 들어, "와"A "%"로 (하지만 난 당신이 더 포괄적 인 해답을 찾고 추측하고있어 대체 할 수있다. (이것은 또한 주문 특정 것, 사과 배 앞에 와야 할 것 같은 .)

    여기 간단한 예를 들어, "와"A "%"로 (하지만 난 당신이 더 포괄적 인 해답을 찾고 추측하고있어 대체 할 수있다. (이것은 또한 주문 특정 것, 사과 배 앞에 와야 할 것 같은 .)

  4. ==============================

    4.어. 아니 가장 좋은 해결책 생각 싶지만 여러 좋아하는에 배열 및 루프 그들을로 단어를 분리 할 수 ​​있습니다. , 관찰 보고서 등을 AND 연산을 꺼낼 한 다음 폭발 실행하는 데 어떤을 대체를 수행합니다.

    어. 아니 가장 좋은 해결책 생각 싶지만 여러 좋아하는에 배열 및 루프 그들을로 단어를 분리 할 수 ​​있습니다. , 관찰 보고서 등을 AND 연산을 꺼낼 한 다음 폭발 실행하는 데 어떤을 대체를 수행합니다.

    그럼 그냥 루프.

    $ SQL = 양동이에서 SELECT * 여기서 ";

    루프 배열 $ SQL은. = "LIKE '%를 bucketname". $ arrayEl [I]. "% OR '. 지난 포함 OR 0 = 1 등의 마지막 줄을 추가하지에 그냥 마지막 반복에 있는지 확인

    효율적인하지만이 경우에는 작동거야하지, 우아한 않습니다. 당신은 정직의 텍스트 필드의 경우 전체 텍스트 검색을 실행하는 더 나을 것입니다.

  5. ==============================

    5.나는 MySQL 데이터베이스 내 여러 단어 검색에 대한 기본 SQL 뭔가를 원했다. 나는 다음에 올 그래서.

    나는 MySQL 데이터베이스 내 여러 단어 검색에 대한 기본 SQL 뭔가를 원했다. 나는 다음에 올 그래서.

    $terms=explode(" ",$search);
    $count=count($terms);
    $sql="SELECT * FROM product WHERE";                     
    for($i=0;$i<$count;$i++)
    {
        if($i!=$count-1)
            $sql = $sql.
            " (pname LIKE '%$terms[$i]%' OR category LIKE '%$terms[$i]%' OR    
              sub_category LIKE '%$terms[$i]%' OR 
              description LIKE '%$terms[$i]%') AND ";
        else
            $sql = $sql.
            "(pname LIKE '%$terms[$i]%' OR category LIKE '%$terms[$i]%' OR 
             sub_category LIKE '%$terms[$i]%' OR 
             description LIKE '%$terms[$i]%')";
    }    
    
  6. ==============================

    6.당신은이 문자열로 "사과와 배"를 분할 할 수 있습니다; "사과"와 "배". 아마, 당신은 WHERE bucketname LIKE '% 사과 %'를 할 OR LIKE '% 배 %'를 bucketname 수 있습니다. 이 도움이 나도 몰라.

    당신은이 문자열로 "사과와 배"를 분할 할 수 있습니다; "사과"와 "배". 아마, 당신은 WHERE bucketname LIKE '% 사과 %'를 할 OR LIKE '% 배 %'를 bucketname 수 있습니다. 이 도움이 나도 몰라.

  7. from https://stackoverflow.com/questions/3621310/php-sql-select-where-like-search-item-with-multiple-words by cc-by-sa and MIT license