Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Inteligentna Wyszukiwarka :)
Forum PHP.pl > Forum > PHP
MaxRipper
Dziś postanowilem "stuningować" troszke moja serwisowa wyszukiwarkę - wcześniejsza była malo inteligentna ponieważ gdy w bazie znajdowal sie rekord o domyślnej nazwie np. "Lord of the Ring", w momencie gdy internauta wpisal "the lord of the ring" wyszukiwarka nic nie znajdowała. Teraz troszke podrasowalem zapytanie jednak nadal cos nie pasuje. Otóż:

  1. <?php
  2.  
  3. $word = &#092;"pirates matrix wredne\";
  4. $word_e = explode(&#092;" \", $word);
  5. for($i=0;$i<count(explode(&#092;" \", $word));$i++) 
  6. {
  7. $word_s .= &#092;"tytulen OR tytulpl LIKE '%$word_e[$i]%' OR \";
  8. }
  9. $word_s = substr($word_s, 0, strlen($word_s)-4);
  10. echo $word_s;
  11. $zapytanie = &#092;"SELECT kolumny FROM tabela WHERE 1 AND ($word_s) \";
  12. $wykonaj = mysql_query ($zapytanie);
  13. while ($wiersz = mysql_fetch_array ($wykonaj)) {
  14. echo &#092;"[Film] <strong>\".$wiersz['tytulpl'].\"</strong> (\".$wiersz['tytulen'].\") - \".$wiersz['date'].\"<br>\";
  15. }
  16.  
  17. ?>


Zapytanie select wyglada taK:

  1. <?php
  2. $zapytanie = &#092;"SELECT id, tytulpl, tytulen, prodate FROM filmy WHERE 1 AND (tytulen OR tytulpl LIKE '%pirates%' OR tytulen OR tytulpl LIKE '%matrix%' OR tytulen OR tytulpl LIKE '%wredne%') \";
  3. ?>


Problem polega na tym ze zwraca mi takie rekordy ktore zupelnie nie pasują do slów kluczowych:

  1. <?php
  2. [Film] Matrix (Matrix, The) - 1999
  3. [Film] Matrix Reaktywacja (Matrix Reloaded) - 2002
  4. [Film] Matrix Rewolucje (Matrix Revolutions) - 2003
  5. [Film] 28 dni później (28 Days Later) - 2002
  6. [Film] Formuła (51st State, The) - 2002
  7. [Film] Za szybcy za wściekli (2 Fast 2 Furious) - 2003
  8. [Film] 28 dni (28 Days) - 2000
  9. [Film] 25. godzina (25th Hour) - 2002
  10. [Film] 13 wojownik (13th warrior, The) - 1999
  11. [Film] 21 gramów (21 Grams) - 2003
  12. [Film] Osiem i pół (8 1/2) - 1963
  13. [Film] 50 pierwszych randek (50 First Dates) - 2004
  14. [Film] Wredne dziewczyny (Mean Girls) - 2004
  15. ?>


Czy mozna coś z tym zrobić?
Parti
Niezbyt mi się podoba ten warunek, a przynajmniej nie bardzo rozumiem co chcesz dokaładnie wyrazić:
  1. ... WHERE 1 AND (tytulen OR tytulpl LIKE '%pirates%' OR tytulen OR tytulpl LIKE '%matrix%' OR tytulen OR tytulpl LIKE '%wredne%


Może lepiej by było:
  1. ... WHERE 1=1 AND (tytulen LIKE '%pirates%' OR tytulpl LIKE '%pirates%' OR ... )


PS. Tak offtopic. Nie wszystkie bazy danych akceptują warunek WHERE 1 AND.. dlatego lepiej pisać WHERE 1=1 AND ..
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.