Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Jak zrobić wyszukiwarkę szukającą wszystkie wpisane słowa?
Forum PHP.pl > Forum > PHP
kukix
Witam.
Zastanawiam się, jak można by przygotować wyszukiwarkę, która szukała by wszystkie wpisane frazy w wyszukiwarce.

Np wpisując: "telewizor SONY" chciałbym, żeby znalazło wpis w bazie zawierający oba słowa czyli np: "telewizor LCD 32' SONY"

Obecnie moja wyszukiwarka działa na podstawie takiego zapytania:

  1. $wynik = sql("
  2.  
  3. SELECT SQL_CALC_FOUND_ROWS p.*
  4.  
  5. FROM tabela p
  6.  
  7. WHERE
  8. (p.prod_nazwa LIKE '%".$_GET['szukaj_fraza']."%'
  9. OR p.prod_id LIKE '%".$_GET['szukaj_fraza']."%'
  10. OR p.meta_keywords LIKE '%".$_GET['szukaj_fraza']."%'
  11. OR p.dostawca_prod_id LIKE '%".$_GET['szukaj_fraza']."%'
  12. OR p.kod_kreskowy LIKE '%".$_GET['szukaj_fraza']."%'
  13. OR p.producent_prod_id LIKE '%".$_GET['szukaj_fraza']."%')
  14.  
  15. AND p.zablokuj = 0
  16. AND (p.odmiana = '' OR p.odmiana = 'mother')
  17.  
  18. ORDER BY p.".$sortuj."
  19.  
  20. LIMIT $start,$limit;
  21.  
  22. ");



Czy mam każde wpisane słowo rozbijać na części i z każdym robić LIKE?


ylk
Poczytaj o wyszukiwaniu pełnotekstowym i MATCH AGAINST w MySQL.
Zobacz tutaj: http://www.petefreitag.com/item/477.cfm
kukix
Próbuje utworzyć FULLTEXT dla dwóch kolumn.

Dostaję następujący komunikat:
Cytat
#1283 - Column 'meta_keywords' cannot be part of FULLTEXT index
ALTER TABLE `esklep_prod` ADD FULLTEXT (
`prod_nazwa` ,
`meta_keywords`
);


obydwie kolumny są typu VARCHAR (255)
cycofiasz
Obydwie kolumny muszą mieć identyczne kodowanie
kukix
Dziękuje za informacje, rzeczywiście były różne kodowania.



Mam dalej problem z tą wyszukiwarką.
Wpisuje w wyszukiwarce "telewizor 42" i pokazują mi się tez telewizory 26, 32, 37 itd :/

Moje zapytanie wygląda dokładnie tak:


  1. SELECT SQL_CALC_FOUND_ROWS p.*, MATCH(p.prod_nazwa) AGAINST ('".$_GET['szukaj_fraza']."') AS score
  2.  
  3. FROM ".$dbprefix."prod p
  4.  
  5. WHERE
  6. (MATCH(p.prod_nazwa) AGAINST ('".$_GET['szukaj_fraza']."')
  7.  
  8. OR p.prod_id LIKE '%".$_GET['szukaj_fraza']."%'
  9. OR p.dostawca_prod_id LIKE '%".$_GET['szukaj_fraza']."%'
  10. OR p.kod_kreskowy LIKE '%".$_GET['szukaj_fraza']."%'
  11. OR p.producent_prod_id LIKE '%".$_GET['szukaj_fraza']."%')
  12.  
  13. AND p.zablokuj = 0
  14. AND (p.odmiana = '' OR p.odmiana = 'mother')
  15.  
  16. ORDER BY score DESC
  17.  
  18. LIMIT $start,$limit;




próbowałem wpisywać frazy z plusami: +telewizor +42

i dalej to samo :/ co moge robić źle?
phpion
Wyszukiwanie pełnotekstowe w MySQL domyślnie ignoruje frazy krótsze niż 3 znaki (nie pamiętam czy włącznie), dlatego olewa Ci "42".
fiasko
O zgrozo jak ty bez filtrowania zapytania dajesz do bazy bezpośrednio z $_GET. Skasować taką bazę to 10 sek roboty.
kukix
Cytat(fiasko @ 1.04.2011, 10:19:36 ) *
O zgrozo jak ty bez filtrowania zapytania dajesz do bazy bezpośrednio z $_GET. Skasować taką bazę to 10 sek roboty.


A co mam użyć do zabezpieczenia tej zmiennej?

mysqlescapestring() wystarczy?

Cytat(phpion @ 1.04.2011, 08:23:26 ) *
Wyszukiwanie pełnotekstowe w MySQL domyślnie ignoruje frazy krótsze niż 3 znaki (nie pamiętam czy włącznie), dlatego olewa Ci "42".


Napisałem do admina, żeby ustawił parametr "ft_min_word_len" na 2.
Zgodzili się, przy restarcie będzie już 2.
Reptile ReX
mysql_real_escape_string
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.