PHP + MySql Wyszukiwanie w bazach

Odpowiedz Nowy wątek
2003-11-27 10:07
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 koleji kazdej tablicy poprzez odczytanie danych oraz sprawdzenie czy w danym ciagu nie kryje sie dany ciag ???


Make love, not war !

Pozostało 580 znaków

2003-11-27 15:00
0

Może to coś pomoże.

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

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

Pozostało 580 znaków

2003-11-27 16:08
0

(...) LIKE '&witaj&'

// znak % reprezentuje (...)

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


Grunt to uziemienie...

Pozostało 580 znaków

2003-11-27 16:42
0

(...) LIKE '&witaj&'

// znak % reprezentuje (...)

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

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

Pozostało 580 znaków

2003-11-27 16:44
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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