Поисковая система - Select в другой


Здравствуйте, я делаю поисковой системе, но я среди мирян о-запросов. Метод, который я думал, чтобы уточнить поиск, и в этом случае было бы простого поиска между двумя полями таблицы с множеством продуктов, было идти, удалив через selects.

$varBusca = str_replace(array(',',' ','.','%','-','/','\\'),'-',$_POST['busca']);
$varBusca = explode('-',$varBusca);
/*  metodo 1 */
$query_busca="";
$pos_busca=0;
foreach($varBusca as $chave)
{
    if ($pos_busca==0){
        $query_busca.="SELECT * FROM ( # ) WHERE pro_nome LIKE '%$chave%' OR pro_descricao LIKE '%$chave%'";
    }else{
        $query_inserida="SELECT * FROM ( # ) WHERE pro_nome LIKE '%$chave%' OR pro_descricao LIKE '%$chave%'";
        $query_busca=str_replace('#',$query_inserida,$query_busca);
    }
    $pos_busca++;
}
$query_busca=str_replace('#','produtos',$query_busca);
echo $query_busca;

и Я нарушаю строку поиска и хватаюсь за каждое слово. Но этот запрос заканчивается, что мне возвращая ни один элемент таблицы, в том, что есть какой-то элемент, с каким-то словом из запроса.

- Нибудь предложения?

Author: William Lima, 2014-05-08

2 answers

Адаптировал это решение другой ответ мой. Идея заключается в использовании PHP, чтобы разделить ваши поиски на отдельные слова, и создать запрос, ГДЕ ты, но таким образом, что у вас уже есть запрос, который ищет все слова сразу:

<?php

   $pesquisa = str_replace( array( ',', '.', '%', '-', '/', '\\' ),' ', $_POST['busca'] );
   $palavras = explode( ' ', $pesquisa ); // dividindo as palavras pelo espaço
   $palavras = array_filter($palavras); // eliminando ítens vazios

   $query = 'SELECT * FROM produtos ';
   $cola = 'WHERE ';

   //Aqui você pode juntar vários campos no concat.
   $campo = 'CONCAT( pro_nome, " ", pro_descricao)';

   foreach ($palavras as $palavra) {
      $palavra = trim($palavra); //Removendo espaços em branco
      $palavra = mysql_real_escape_string($palavra); //Precisa da conexao com o banco!
      $query .= $cola.campo.' LIKE "%'.$palavra.'%" ';
      $cola = 'AND ';
   }

   echo htmlentities( $query );
?>

, И результат поиска lápis azul 3b:

SELECT * FROM produtos WHERE
   CONCAT( pro_nome, " ", pro_descricao) LIKE "%lápis%" AND
   CONCAT( pro_nome, " ", pro_descricao) LIKE "%azul%" AND
   CONCAT( pro_nome, " ", pro_descricao) LIKE "%3b%"

(разрывы строк добавлены для удобства чтения)

Таким образом, в поиск, вы найдете все эти результаты:

Lápis azul 3b
Lápis 3b azul-claro
Lápis azulado 3bcd

Обратите Внимание, что несмотря на то, что некоторые строки не имеют точных результатов, лучше иметь вещи более, что пользователь не нашел, что нужно. Имейте в виду, однако, что цена, которую платит за сложность поиска немного медленнее.

 7
Author: Bacco, 2017-04-13 12:59:39

Я Не знаю, если я поняла правильно, что вас интересует.

У Вас есть поле поиска, где пользователь может ввести "любой текст в поле" и в поиске, вы хотите принести все записи, которые в определенное поле содержит слова поле ("Один", "текст", "либо", "в", "поле")?

Если это так, вы можете сделать так:

$search = explode(" ", $_POST["search"]);

$strSQL = "SELECT * FROM tabela";

foreach ( $search as $key => $value ){

    if ( $key == 0 ){
        $strSQL .= " WHERE ";
    }else{
        $strSQL .= " OR ";
    }

    $strSQL .= "campo like '%{$value}%'";

}

Таким образом, если предположить, что текст, введенный в поле поиск именно "любой текст в поле" значение переменной $strSQL:

SELECT * FROM tabela WHERE campo like '%Um%' OR campo like '%texto%' OR campo like '%qualquer%' OR campo like '%no%' OR campo like '%campo%'
 1
Author: Thiago Thaison, 2014-05-14 15:00:31