Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]wyszukiwanie ciągu znaków w bazie
Forum PHP.pl > Forum > Przedszkole
eki
Wiatam!!
Probuje stworzyc skrypt wyszukiwania wyrazen w bazie. Mam taki skrypt w tej chwili. Problem,ze skrypt nie znajduje zadnego wyrazenia, nawet takiego ktore na 100% istnieje.

CODE

include ("admin/connect.php");
$szukaj=$_GET['szukaj'];
echo 'szukane wyrażenie '.$szukaj.'<br>';
$sql="SELECT * FROM www WHERE usun<>1";
$zapyt=mysql_query($sql) or die(mysql_error());
while ($wynik=mysql_fetch_assoc($zapyt)) {
$tresc=$wynik['tresc'];
$id=$wynik['id'];
$tytul=$wynik['tytul'];
$exist=strpos($tresc, $szukaj);
if (!empty($exist)) {
echo '<h2>'.$tytul.'</h2><br>';
}

}
if (empty($exist)) echo 'Nie znaleziono szukanego wyrażenia';
MajareQ
Słyszał o dyrektywie LIKE?
eki
nie-e. Ale poszukam
phpion
Cytat(MajareQ @ 15.10.2008, 11:37:09 ) *
Słyszał o dyrektywie LIKE?

LIKE jest dla mięczaków winksmiley.jpg zainteresuj się wyszukiwaniem pełnotekstowym:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
a w szczególności z tym:
http://dev.mysql.com/doc/refman/5.0/en/ful...l-language.html
Daje zdecydowanie większe możliwości niż zwykłe LIKE.
MajareQ
Nie rzucaj ekiego od razu na głębokie wody winksmiley.jpg
Ale bardzo dobrze, że zwróciłeś na to uwagę smile.gif
phpion
Samo LIKE jest bardzo użyteczne np. przy autouzupełnianiu (jak na forum w wyszukiwarce przy wpisywaniu loginu użytkownika). Dodanie indeksu na dane pole będzie również wykorzystywane przy LIKE "a%". Jednak w przypadku podanym przez autora tematu lepszym rozwiązaniem wydaje się właśnie wyszukiwanie pełnotekstowe.
Głęboka woda? Może taki ciut głębszy brodzik winksmiley.jpg heeh
eki
ok,poczytałam o Match() ,dodałam w tabeli indeks TEXTFULL(strona,tresc);
kod wygląda tak:
CODE

include ("admin/connect.php");
$szukaj=$_GET['szukaj'];
echo 'szukane wyrażenie '.$szukaj.'<br>';
$sql="SELECT * FROM www WHERE MATCH(strona,tresc) AGAINST ('$szukaj') AND usun<>1";
$zapyt=mysql_query($sql) or die(mysql_error());
while ($wynik=mysql_fetch_assoc($zapyt)) {
$tresc=$wynik['tresc'];
$id=$wynik['id'];
$strona=$wynik['strona'];
echo '<h2>'.$strona.'</h2><br>';

}


mam teraz następujący problem,wydaje mi się,że przeszukuje tylko kolumnę 'strona'
golaod
Czym masz poparte takie założenie ? wpisz słowo którego nie ma w strona a jest w tresc. Wynik powinienes otrzymac na pewno.
Tak przy okazji gratuluje eki. W końcu ktoś kto dostał jako pomoc linka do manuala i sobie bez problemu poradził.
eki
sprawdzałam właśnie w taki sposób jak napisałeś, na przykład przy zadanym do wyszukiwania wyrazie "i" pokazuje jako wynik tylko stronę,która ma w tytule ten łącznik. sad.gif
golaod
Okazuje się zatem, że za słabo manuala przeczytałeś. Jest tam wyraźnie napisane, że są słowa które są traktowane jako stopwords czyli nie wyszukiwane lub z którymi chyba jest problem. Nie wiem bo sam nie czytałem tego dokładnie ale moim zdaniem szukanie w tekście "i" nie ma po prostu żadnego sensu.
eki
smile.gif
golaod
Cytat(eki @ 21.10.2008, 09:52:49 ) *
smile.gif


Trochę dziwna wypowiedź ale ok ;]

Okazało się, że mam racje + dodatkowo parę innych rzeczy:

Cytat
Excludes partial words
Excludes words less than 4 characters in length (3 or less)
Excludes words that appear in more than half the rows (meaning at least 3 rows are required)
Hyphenated words are treated as two words
Rows are returned in order of relevance, descending
Words in the stopword list (common words) are also excluded from the search results. The stopword list is based upon common English words, so if your data is used for a different purpose, you'll probably want to change the list. Unfortunately, doing so at present is not easy. You'll need to edit the file myisam/ft_static.c. recompile MySQL, and rebuild the indexes! To save you hunting through the source, or if you have a binary version of MySQL, here is a list of stopwords. Note that these can and do change with different versions. To be absolutely sure, you'll have to check the specific list for your version


Wszystko na stronie http://www.databasejournal.com/features/my...cle.php/1578331
(wystarczy kliknąć skip żeby ominąć reklame)
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.