Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Wyszukiwarka, Zapytanie LIKE nie jest optymalne
majestiq
post
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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%"


--------------------
Go to the top of the page
+Quote Post
majestiq
post
Post #3





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

Ostrzeżenie: (0%)
-----


Ale jak to podzielić, przecież nawet nie wiem ile wyrazów ktoś wpisze, może ich być dużo.


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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


--------------------
Go to the top of the page
+Quote Post
nevt
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
majestiq
post
Post #6





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

Ostrzeżenie: (0%)
-----


Bardziej ciekawy wydaje się być prostszy sposób winksmiley.jpg
Dzięki za pomoc.


--------------------
Free mp3 download.
Go to the top of the page
+Quote Post
wookieb
post
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Prostszy nie uwzglednia opcji wpisywania wielu spacji przez uzytkownika np " fraza test " i moze byc kicha.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 14:09