Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Wyszukiwarka
Forum PHP.pl > Forum > Przedszkole
majestiq
Na stronie mam wyszukiwarke plików.

Po wpisaniu w pole SEARCH dane z bazy są porównywane z wpisanym wzorcem w ten sposób:

  1. <?php
  2. $sql = 'SELECT id,tytul,rozmiar,licznik,dlugosc FROM `'.$tabelka.'` WHERE `tytul` LIKE '%'.$wykonawca.'%' ORDER by tytul LIMIT 1000 ';
  3. ?>


No i załóżmy ktoś wpisze: ' boys szalona' to mi nie znajdzie kawałka którego tytuł to: "boys - szalona" lub "boys - jesteś szalona"
tylko dokładnie taki ciąg jaki został wpisany.

Jak poprawić to zapytanie, żeby wyszukiwarka zwracała bardziej trafne wyniki tzn jak wpisze jakieś słowa to poprostu wystarczy, żeby się one znalazły w tytule
i ma zostać zwróćony wynik a nie tylko gdy te słowa występują w identycznym ciągu jak ten który został wpisany ?

Mam nadzieje że jest zrozumiałe o co mi chodzi smile.gif
wookieb
Zmień tytuł tematu bo obrażasz LIKE...
Dzielisz fraze na wyrazy i dajesz like na każdym z nich like
Kod
... LIKE "%wyraz1%" AND topic LIKE "%wyraz2%"
majestiq
Ale jak to podzielić, przecież nawet nie wiem ile wyrazów ktoś wpisze, może ich być dużo.
wookieb
Alergia na manual??
Kod
$fraza="   Szukaj     mnie  a co mi tam";
// podział
$arr=preg_split('/\s+/', trim($fraza));

// usuwanie za krotkich slow

$ile=count($arr);

for($i=0; $i<$ile; $i++)
{
    if(strlen($arr[$i])<3) unset($arr[$i]);
}

$arr=array_merge($arr); // resetowanie kluczy jakbys potem nie wiedzial jak przejsc po wszystkich elementach

print_r($arr);

Masz ładną tablicę słów. Zapytanie sobie sam skleisz
nevt
Można też w prostszy sposób:

zmień kod na
  1. <?php
  2. $wykonawca = str_replace(' ', '%', $wykonawca);
  3. $sql = "SELECT id, tytul, rozmiar, licznik, dlugosc FROM `$tabelka` ".
  4. "WHERE `tytul` LIKE '%$wykonawca%' ORDER by tytul LIMIT 1000 ";
  5. ?>


A jeżeli ma szukać wyników bez względu na kolejność słów, to musisz poczytać o indeksach FULLTEXT oraz składni polecania SQL: ... MATCH ... AGAINST

Powodzenia.

PS. Zapytanie SQL podzieliłem na 2 linijki bo przy jednej lay forum się rozjeżdża...
majestiq
Bardziej ciekawy wydaje się być prostszy sposób winksmiley.jpg
Dzięki za pomoc.
wookieb
Prostszy nie uwzglednia opcji wpisywania wielu spacji przez uzytkownika np " fraza test " i moze byc kicha.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.