PHP + MySql Wyszukiwanie w bazach

0

Mam sobie w bazie jakies 30 tabel i chcialem zrobic sobie wyszukiwarke.

W sumie nie byloby problemu bo wyszukiwanie typu:

SELECT * FROM tab1,tab2,tab3 WHERE
tab1.pole1= '$szukaj' OR
tab2.pole3= '$szukaj' OR
.... itd.

Ale jezeli mam pole TEXT z napisem: "Witaj, to jest jakas fajna stronka !", a ktos bedzie chcial to znalezc to bedzi musial wpisac: "Witaj, to jest jakas fajna stronka !", a wpisze "Witaj" to nie znajdzie.

I wlasnie tu lezy problem. Jak to sobie wszystko ladnie zrobic zeby mi przeszukiwal wszystkie tabele.

Czy tylko istnieje mozliwosc przeszukiwania w petli po kolei kazdej tablicy poprzez odczytanie danych oraz sprawdzenie czy w danym ciagu nie kryje sie dany ciag ???

0

Może to coś pomoże.

SELECT * from tab1 WHERE tab1.pole1 LIKE '%witaj%'

// znak % reprezentuje dowolny łańcuch znaków

0

(...) LIKE '&witaj&'

// znak % reprezentuje (...)

Hmm... Wybacz, ale możnaby się zdecydować w końcu...

0

(...) LIKE '&witaj&'

// znak % reprezentuje (...)

Hmm... Wybacz, ale możnaby się zdecydować w końcu...

Przepraszam moja wina [wstyd] , ale już poprawiłem :d

0

Owszem, mozna uzyc operatora LIKE:

SELECT * FROM tab1 WHERE kolumna LIKE "%wartosc%";

Niestety operator LIKE nie jest jednak zbyt efektywny (no, moze przy mniejszych tabelach), ale co tu dopiero mowisz o 30 tableach! 8-0

To bedzie zabojstwo dla bazy. Co mozesz zrobic: mozesz ustawic index dla kolumn, ktore chcesz przeszukiwac - np. dla kolumny1 dla tabeleli tab1, kolumny2 dla tabeli tab2. To cos pomoze, lecz ma wade: zwiekszy rozmiar bazy danych na serwerze.

Bardzo efektowny jest (sczegolnie w MySQL 4.0) mechanizm wyszukiwania - FULLTEXT. Opiera sie on na zalozeniu specjalnego indeksu na konkretne kolumny i szukaniu specjalnymi, przygotowanymi do tego operatorami (w tym jest mozliwosc laczenia slow kluczowych, brania wszystkiego jako jedna fraze). Po szczegoly odsylam do dokumentaji MySQL.

Twoja sytuacja jest troche nieciekawa - samo pisanie wyszukiwarki jest ciezkie. Ja bym na Twoim miejscu uzyl jakiegos osobnego skryptu wyszukiwarki, ktore indeksuje caly serwis. Wowczas przeszukiwanie bedzie o wiele szybsze. Wada: zajmie to wszystko wiecej miejsca w bazie danych a samo indeksowanie wszystkich stron bedzie baaardzo dlugie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1