Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wyszukiwarka
Forum PHP.pl > Forum > PHP
Arek00
obecnie mam wyszukiwarkę która działa na zasadzie SELECT * FROM tabela WHERE kolumn like '%fraza%' czyli wyszukuje całą wpisaną frazę. chciałbym ją zmienić na taką która będzie szukała rekordu który ma wszystkie słowa zawarte w frazie czyli np. przy frazie "jeden trzy" w wyniku będzie rekord "jeden dwa trzy". wymyśliłem sobie coś takiego:
  1. <?php
  2.  
  3. $fraza = "jeden dwa trzy cztery";
  4.  
  5. $tablica = explode(' ', $fraza);
  6.  
  7. $zapytanie = "SELECT * FROM lista WHERE dostepnosc LIKE 'T'";
  8.  
  9. $dlugosc = count($tablica);
  10. for ($i=0; $i<=$dlugosc-1; $i++){
  11.  $zapytanie .= " AND (producent LIKE '%$tablica[$i]%' OR model LIKE '%$tablica[$i]%')";
  12. }
  13. $zapytanie .= " ORDER BY kategoria, cena ASC";
  14. echo $zapytanie;
  15.  
  16. ?>


przy frazie
Kod
"jeden dwa trzy cztery"
powstaje takie zapytanie:
  1. SELECT * FROM lista WHERE dostepnosc LIKE 'T' AND (producent LIKE '%jeden%' OR model LIKE '%jeden%') AND (producent LIKE '%%' OR model LIKE '%%') AND (producent LIKE '%dwa%' OR model LIKE '%dwa%') AND (producent LIKE '%trzy%' OR model LIKE '%trzy%') AND (producent LIKE '%cztery%' OR model LIKE '%cztery%') ORDER BY kategoria, cena ASC

ale przy frazie
Kod
"jeden  dwa trzy cztery"
powstaje takie zapytanie i w efekcie wynik zawiera wszystkie rekordy:
  1. SELECT * FROM lista WHERE dostepnosc LIKE 'T' AND (producent LIKE '%jeden%' OR model LIKE '%jeden%') AND (producent LIKE '%%' OR model LIKE '%%') AND (producent LIKE '%dwa%' OR model LIKE '%dwa%') AND (producent LIKE '%trzy%' OR model LIKE '%trzy%') AND (producent LIKE '%cztery%' OR model LIKE '%cztery%') ORDER BY kategoria, cena ASC


===========================================
zmieniłem explode na str_word_count i jest niby ok. proszę o poradę czy tak się realizuje czy jakoś inaczej? aktualny kod:
  1. <?php
  2.  
  3. $fraza = "jeden  dwa trzy cztery";
  4.  
  5. $tablica = str_word_count($fraza, 1);
  6.  
  7. $zapytanie = "SELECT * FROM lista WHERE dostepnosc LIKE 'T'";
  8.  
  9. $dlugosc = count($tablica);
  10. for ($i=0; $i<=$dlugosc-1; $i++){
  11.  $zapytanie .= " AND (producent LIKE '%$tablica[$i]%' OR model LIKE '%$tablica[$i]%')";
  12. }
  13. $zapytanie .= " ORDER BY kategoria, cena ASC";
  14. echo $zapytanie;
  15.  
  16. ?>

jak zrobić żeby pomijało pojedyńcze litery czyli dla frazy "Jacek i Placek" będzie szukać tylko słow Jacek Placek
athabus
Witam,

http://www.symfony-project.org/askeet/1_0/21

tu na początku masz opisane jak prosto można zrobić wyszukiwarkę.

Sposób, którego używasz mocno obciąża bazę, więc przy większej ilości danych może być krucho.
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.