Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Wyszukiwarka z szukaniem znak po znaku
northwest
post
Post #1





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Witam serdecznie,
Mam problem z wyszukiwarką...

Chcę zrobić wyszukiwarkę która szuka zamiennie słowa (przykładowo wpisując "auto myjnia" i "myjnia auto" ma zwracać takie same wyniki) oraz
w momencie gdy ktoś użyje (lub nie użyje) polskich znaków przykładowo "łożysko" oraz "lożysko" - żeby wyświetlała wyniki z obu fraz...

kombinuję z takim kodem:

  1. $fraza = $_GET['szybkoszukaj'];
  2. $subquery = null;
  3.  
  4. if ($fraza != "") {
  5. //$subquery .= " name like '%".$fraza."%' and ";
  6. $zwrot = explode(' ', $fraza);
  7. $pet = str_replace("l", "ł", $zwrot[0]);
  8.  
  9. $subquery .= " and (nazwa LIKE '%$zwrot[0]%' or bf_id LIKE '%$zwrot[0]%' or bf_id LIKE '%$pet%') ";
  10. $i = 0;
  11. foreach ($zwrot as $z) {
  12. if ($i > 0) {
  13. $pet = str_replace("l", "ł", $fraza);
  14. $subquery = $subquery . " and (nazwa LIKE '%$z%' or bf_id LIKE '%$z%' or bf_id LIKE '%$pet%')";
  15. }
  16. $i++;
  17. }
  18.  
  19. //$subquery=$subquery." or name LIKE '%$pet%' ";
  20. $subquery .= $subquery . ' ';
  21. }



ale nie bardzo chce działać (IMG:style_emoticons/default/sad.gif)
Macie może pomysł co mam źle w tym kodzie?


Z góry dziękuje za pomoc,
Northwest

Ten post edytował northwest 11.10.2012, 11:15:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Jeśli w bazie masz łożysko (czy to strona o ginekologii?), a chcesz żeby wyszukało także wpisanie w wyszukiwarce lozysko, to newralgiczne znaki zastąp znakiem podkreślenia i dopiero szukaj, to prostsze niż się bawić w zamiany. Czyli szukana fraza: _o_ysko. Poza tym gdzie jest główna część zapytania? Bo tu tylko się od AND zaczyna.
Go to the top of the page
+Quote Post
bostaf
post
Post #3





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(b4rt3kk @ 11.10.2012, 12:47:38 ) *
Jeśli w bazie masz łożysko (czy to strona o ginekologii?)

(IMG:style_emoticons/default/biggrin.gif) dobre dobre (IMG:style_emoticons/default/smile.gif)

Cytat(b4rt3kk @ 11.10.2012, 12:47:38 ) *
Jeśli w bazie masz łożysko (czy to strona o ginekologii?), a chcesz żeby wyszukało także wpisanie w wyszukiwarce lozysko, to newralgiczne znaki zastąp znakiem podkreślenia i dopiero szukaj, to prostsze niż się bawić w zamiany. Czyli szukana fraza: _o_ysko. Poza tym gdzie jest główna część zapytania? Bo tu tylko się od AND zaczyna.

Do wzorca _o_ysko pasują także nożysko, kołysko, morysko (nie jestem taki mądry, tu znalazłem).

  1. Zamiast
    1. LIKE '%abc%' AND LIKE '%bcd%' AND LIKE '%cde%'
    spróbuj z
    1. LIKE REGEXP 'abc|bcd|cde'
  2. Co może pomóc na diakrytyki, to wywołanie
    1. SET NAMES utf8 COLLATE utf8_general_ci
    przed wykonaniem zapytania. Bo to kodowanie (nie miałem czasu mocniej testować, ale na pewno się pobawię) powinno ignorować znaki diakrytyczne.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 18:10