Riggs
25.05.2008, 18:31:51
Witam!
Otóż w moim projekcie mam zaimplementować system tagów (czyli wyszukiwanie rekordów po słowach kluczowych). Założyłem, że będzie je wprowadzał użytkownik. Problem pojawia się w implementacji gdyż jeszcze czegoś takiego nie potrzebowałem. Mam 2 koncepcje na to:
1) Tagi przechowywane w polu tekstowym i wyszukiwanie jako " LIKE '%tekst_taga%'";
2) Każdy tag wrzucać do tabeli "tagi" i łączyć artykuł z danym tagiem w tabeli zliczeniowej;
Które rozwiązanie jest lepsze zarówno pod względem wydajności jak i "profesjonalności" kodu?
Szukałem na forum podobnych tematów ale znalazłem tylko proste wyszukiwarki tekstowe które nie są wystarczające dla mojego problemu.
Z góry dzięki za odpowiedź.
Pozdrawiam
.radex
25.05.2008, 18:35:13
Ja bym zrobił w pewnym sensie połączenie obu tych sposobów - pole z tagami dla np. newsa i pole z np. newsami dla tagów - ułatwi to szukanie po bazie.
Shili
25.05.2008, 18:40:54
@up
Przykład jest chybiony, jeśli dla newsa będzie więcej niż jeden tag, jeśli natomiast po jednym do newsa, to faktycznie najlepsze rozwiązanie. Przy kilku tagach bez dodatkowego pola niewiele się zrobi (wiele do wiele bądź co bądź)
Ja jednak utworzyłabym osobną tabelę, jeśli natomiast do jednego newsa można dodać wiele tagów, to oczywiście dwie osobne tabele. A tak naprawdę co jest bardziej wydajne możesz spokojnie sprawdzić - zlicz na jakichś przykładowych danych, który sposób wykonuje się szybciej. Mam wrażenie, że nie ta opcja z like, like bowiem jest dość mało wydajne i wolno działające.
Riggs
25.05.2008, 18:47:02
Zapomniałem dodać że do każdego newsa może być wiele tagów.
Z "LIKE" też wydaje mi się mało wydajne gdyż z reguły operacje na polach typu "TEXT" w MySQL nie są chyba szybkie.
Moli
25.05.2008, 18:50:37
Zrób tabelę tagi np.
Kod
ID | TAG
i tabele łaczenia np.
Kod
NEWS ID | TAG ID
W taki sposób można przypisać do jednego newsa wiele tagów. Wyszukiwanie możesz zrobić w taki sposób, że pobierasz z tabeli laczenia wpisy w ktorych tag = wyszukiwany tag i pobierasz newsy do tego tagu. Można to zrobić jednym zapytaniem
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.