Поисковая система - 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;
и Я нарушаю строку поиска и хватаюсь за каждое слово. Но этот запрос заканчивается, что мне возвращая ни один элемент таблицы, в том, что есть какой-то элемент, с каким-то словом из запроса.
- Нибудь предложения?
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
Обратите Внимание, что несмотря на то, что некоторые строки не имеют точных результатов, лучше иметь вещи более, что пользователь не нашел, что нужно. Имейте в виду, однако, что цена, которую платит за сложность поиска немного медленнее.
Я Не знаю, если я поняла правильно, что вас интересует.
У Вас есть поле поиска, где пользователь может ввести "любой текст в поле" и в поиске, вы хотите принести все записи, которые в определенное поле содержит слова поле ("Один", "текст", "либо", "в", "поле")?
Если это так, вы можете сделать так:
$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%'