Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyszukiwarką...
Forum PHP.pl > Forum > PHP
bigus
A więc tak mam wyszukiwarkę i działa ze stronicowaniem ale mam problem z kodowaniem i wyszukiwaniem kilku słów.
W tym momencie jak szukam np dom i schody znajdzie tylko dokładnie to wyrażenie ale chciałbym żeby szukało i dom i schody.

z kodowaniem tak sobie poradziłem
  1. <?php
  2. //ie
  3. $sstring = str_replace ("%C4%85","ą", $sstring);
  4. $sstring = str_replace ("%C4%87","ć", $sstring);
  5. $sstring = str_replace ("%C4%99","ę", $sstring);
  6.  $sstring = str_replace ("%C5%82","ł", $sstring);
  7. $sstring = str_replace ("%C5%84","ń", $sstring);
  8. $sstring = str_replace ("%C3%B3","ó", $sstring);
  9. $sstring = str_replace ("%C5%9B","ś", $sstring);
  10. $sstring = str_replace ("%C5%BA","ź", $sstring);
  11. $sstring = str_replace ("%C5%BC","ż", $sstring);
  12. $sstring = str_replace ("%20"," ", $sstring);
  13. ?>

a wyszukiwarka
  1. <?php
  2. $searchstring=$sstring;
  3. $database->setQuery("select * "
  4. . " from #__gallery "
  5. . " where published=1 "
  6. . " and (( imgtitle like '%$searchstring%' ) or ( catname like '%$searchstring%' ) or ( imgtext like '%$searchstring%' )) "
  7. . " and published=1 "
  8. . " ORDER BY id desc LIMIT " . $start . "," . $ad_perpage. "");
  9. ?>

Mam jeszcze jeden problem przy zamianie stringa np ze " " na "-"

$string=str_replace(" ", "-",$string);

$string=str_replace("?", "-",$string);

czasami jak jest "?" zostaje "-" i jka to skasować??

Jeśli ktoś ma jakiś pomysł bardzo proszę o pomoc.
vokiel
Musisz sobie rozbic zapytanie na pojedyncze slowa, czyli np po spacji, albo przecinku, plusie lub innym znaku specjalnym, a najlepiej zrób tak:
1. wszystkie te znaki specjalne wrzuć do tablicy
2. zamien na jeden (np "|") znak
3. następnie rozbij to na pojedyncze wyrazy
4. w pętli dodaj warunki zapytania
5. wyslij zapytanie

  1. <?php
  2. //np klasa cleaner do oczyszczenia 
  3. class Cleaner {
  4. var $symbols = array('/','','&#092;'','"',',','.','<','>','?',';',':','[',']','{','}','|','=','+','-','_',')','(','*','&','^','%','$','#','@','!','~','`');
  5. // przy okazji możesz zrobić drugą tablicę i pousuwać niepotrzebne słowa które nic
     nie dają oraz takie które mogą coś popsuć
  6.  
  7. function removeSymbols($string) {
  8. for ($i = 0; $i < sizeof($this->symbols); $i++) {
  9. $string = str_replace($this->symbols[$i],'|',$string);
  10. }
  11.  
  12. return trim($string);
  13. }
  14. }
  15. ?>

  1. <?php
  2. $split_stemmed = split("|",$string); 
  3. while(list($key,$val)=each($split_stemmed)){
  4. if($val<>" " and strlen($val) > 0){
  5. $query_warunki .= "(NAZWA LIKE '%".$val."%') OR "; // Twoje warunki
  6. }
  7. }
  8. $query_warunki=substr($query_warunki,0,(strLen($query_warunki)-3));//tutaj usuwamy ostatni OR
  9.  
  10. // pozniej w zapytaniu masz ciag:
  11. $sql = select * from `gallery` WHERE ( ".$query_string_where." ) AND `published`='1' ORDER BY `id` desc LIMIT " . $start . "," . $ad_perpage. "");
  12. ?>


to tak z grubsza, pisane z palca, jak będziesz już coś miał, to pokaż, postaramy się pomóc
Tubis
A ja bym polecał wyszukiwanie fulltextowe. Wydajniejsze i prostsze, bez żadnych kombinacji obsłuży wyszukiwanie takie jak chcesz.
Pozdrawiam
bigus
Trochę poszukałem w necie i na forum
i zapytanie
  1. <?php
  2. $database->setQuery("SELECT * FROM gallery WHERE published=1 and MATCH (imgtitle, catname) AGAINST ('*$searchstring*' IN BOOLEAN MODE) ORDER BY id desc LIMIT " . $start . "," . $ad_perpage."");
  3. ?>

załatwiło sprawę.
ale i tak dzięki smile.gif
tylko do końca nie rozumiem
Cytat
IN BOOLEAN MODE

co to jest
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.