Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie w bazie danych
Forum PHP.pl > Forum > Bazy danych > MySQL
Leszczu85
Witam,
mam dość rozbudowaną bazę danych (20 tabel po kilkaset do kilku tysięcy rekordów) i potrzebuję zrobić formularz wyszukiwania danych do niej. Zależy mi na przeszukaniu pól typu TEXT w poszukiwaniu jednego z słów kluczowych a wyniki chciałbym posortować wg. trafności. Możecie mi poradzić jakiej metody użyć? Próbowałem LIKE ale nie sprawdza się zbyt dobrze (choć mogę się mylić), słyszałem o wyszukiwaniu pełnotekstowym ale nie wiem czy będzie odpowiednie. Będę wdzięczny za każdą pomoc.
ghostrider
z tego co piszesz FULL-TEXT jest bedzie właściwym rozwiazaniem, byl optimizowany własnie dla duuuuużych tabel z mnóstwem informacji.

Za ograniczeń to

1. typ tabel to MyISAM, FULL-TEXT nie działa na InnoDB.

trzeba też dobrze zrozumieć jak jest ustalana "waga" słow ktorych szukamy
ja to nazywam "odwrotną logiką" tzn:
im wiecej razy szukana fraza pojawi sie we wpisie tym mniejszą "wagę" ma wpis, najbardziej trafne sa wpisy gdzie fraza pojawia sie najmniej razy, ale przynajmniej raz.

indexy pełno textowe tworzy sie tak:
  1. ALTER TABLE `bazadanych`.`tabela` ADD FULLTEXT `Index`(`pole_text`);

najlepiej po dodaniu wszyskich wpisów, a nie przy tworzeniu tabeli.

potem kwerendy:
  1. SELECT *
  2. FROM `bazadanych`.`tabela` WHERE MATCH (`tabela`.`pole_text`) AGAINST ('szukane fraza');


takie zapytanie odrazu sortuje wpisy zależnie od "wagi"

lub

  1. SELECT *, MATCH `tabela`.`pole_text` AGAINST ('szukane fraza') AS trafnosc
  2. FROM `bazadanych`.`tabela`;


jesli chcemy pokazać jak trafne sa resultaty

odsylam tez do dokumentacji MySQL
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.