Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyszukiwanie fraz z tekstu
Forum PHP.pl > Forum > Przedszkole
adam882
Witam serdecznie!

Planuję napisać moduł, który na podstawie podanego tekstu szuka w nim fraz z posiadanych w bazie tagów.

Przykładowo mam tabelę "tagi" o strukturze:
ID | NAZWA
Z ilością ok. 8000-10000 rekordów.

Użytkownik dodaje na stronę treść (np. do 2000 znaków). Teraz chciałbym tak zrobić, aby system wychwycił wszystkie słowa z tego tekstu, które są w tabeli "tagi".
Nie mam pomysłu jak się do tego zabrać. W jaki sposób można coś takiego zrobić? Czy tego typu operacja bardzo obciąża serwer?

Pozdrawiam!



ibalyx
ja bym zrobił tak:

- najpierw rozdzielił wszystkie wyrazy z tekstu (explode?) do tablicy
- potem zagnieżdżona pętla (1 pętla taki, 2 pętla wyrazy z tablicy
- i porównał

ale pewnie idzie to zrobić lepiej smile.gif
KR2615
Najprościej: wyciągasz z bazy danych wszystkie tagi i sprawdzasz czy pojawiają się w tekscie:
  1. $res = mysql_query("SELECT * FROM tags");
  2. while( $row = mysql_fetch_array($res) ) {
  3. if (preg_match( $row[nazwa], $body)) {
  4. $result .= "$row[id],";
  5. }
  6. }
  7. return $result;

Gdzie $body to to, co wklepał user. Funkcja zwróci ci id tagów które występują oddzielone przecinkami.

Edit: Co do obciązenia serwera to troche daje ale jeżeli funkcja miałaby być wywoływana raz, tylko gdy user dodaje tekst to można by to przecierpieć.
adam882
@ibalyx
myślałem nad czymś takim, ale to by chyba było trochę nieoptymalne rozwiązanie, ale dzięki w każdym razie wink.gif

@KR2615
dzięki. Przetestowałem podaną metodę i prz tekście mającym 4000 znaków i 16000 tagach znalazło mi je w czasie średnio 0,3s. Chociaż przy benchmarku apache wypada kiepsko.

Myślałęm też nad tym, czy da się coś takiego zrobić z poziomu bazy danych bez preg_match. Czy da się mimo wszystko szybciej wykonać taką operację?
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.