djgarsi
16.09.2010, 09:34:24
Witam. Mam pewien problem z zapytaniem w wyszukiwaniu rekordów.
Mój kod:
$zapytanie = "SELECT name FROM file WHERE MATCH(name) AGAINST('$search')";
No i właśnie jest ten ostatni komunikat.
Kod wziąłem ze strony
http://ownpage.pl/php/wyszukiwarka-pelnote...-uzyciem-union/
wookieb
16.09.2010, 09:38:35
w DIE dodaj wywołanie
mysql_error
nospor
16.09.2010, 09:39:07
zamiast: Die ("Nie działa zapytanie.");
wyswietl sobie blad zapytania. masz to opisane tu
Temat: Jak poprawnie zada pytanie
djgarsi
16.09.2010, 09:46:27
No dobrze. Dodałem mysql_error i mam błąd treści: Can't find FULLTEXT index matching the column list
wookieb
16.09.2010, 09:51:11
No.. nie masz klucza pełnotekstowego na tym polu.
Przeczytaj dokładnie manuala dotyczącego FULLTEXT-a ponieważ używanie takiego indeksu wymaga umiejętności i wiedzy.
djgarsi
16.09.2010, 09:59:52
No dobrze. A czy jest jakiś inny sposób na szukanie w bazie danych na zasadzie:
- wpisuję frazę,
- nie znajduje całości frazy,
- wyświetla podobne rekordy.
wookieb
16.09.2010, 10:01:05
Fulltextem to zrobisz
Ale polecam inne silniki wyszukiwania typu Sphinx, Solr (Lucene). Niestety nie ma ich w standardowych hostingach.
djgarsi
16.09.2010, 10:07:16
A jest możliwość "rozbicia" frazy na słowa i szukania wg nich?
wookieb
16.09.2010, 10:10:28
W czym?
djgarsi
16.09.2010, 10:12:27
A np poleceniem explode.
wookieb
16.09.2010, 10:15:04
No tak ale w czym? W zwykłej tabeli mysql za pomoca LIKE czy za pomoca FULLTEXT?
djgarsi
16.09.2010, 10:16:33
Tak, w zwykłej tabeli z LIKE. Każde słowo byłoby w LIKE.
wookieb
16.09.2010, 10:21:32
Można. Tylko wiadomo... Fulltext jest bardziej zaawansowany i skuteczniejszy
djgarsi
16.09.2010, 10:25:44
Dobrze, teraz w praktyce.
Rozbiję frazę na słowa. Policzę wyrazy. Pętla for o długości liczby wyrazów.
I tu napotykam problem. Powtarzana będzie formuła OR 'słowo[i+1]'
Jak tą pętlę zgrać z zapytaniem?
goran
17.09.2010, 13:40:48
$e = explode(' ', $_POST['fraza']); if(is_array($e)) foreach($e as $value) $aE[] = 'name LIKE "%'.$value.'%"'; if($aE) $query = 'SELECT * FROM file WHERE '.implode(' OR ', $aE);
Ale to marne rozwiązanie. LIKE jest powolne, a same wyniki nie będą zbyt dokładne. Załóż na pola po których wyszukujesz kluch fulltext'u.
Pozdr.
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.