![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 13 Dołączył: 16.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
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.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
@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. Ten post edytował Shili 25.05.2008, 18:43:51 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 13 Dołączył: 16.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 14:14 |