![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 26.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Potrzebuję trochę informacji jak najlepiej zorganizować system tagów dla wpisów, żeby działało to w miarę optymalnie. Uproszczona struktura bazy: tabela wpis (id_wpisu, nazwa_wpisu) tabela tagi (id_tagu, nazwa_tagu) tabela wpisy_tagi (id_wpisu, id_tagu) Za pomocą formularza odbieram dane, sprawdzam i jeśli wszystko jest ok to wrzucam do bazy. Głównym problemem są tagi - jak to zrobić żeby nie tworzyć niepotrzebnych zapytań. Tagi są wpisywane jako tekst oddzielony przecinkiem np "tag1, długi tag2, tag3, tag4" etc. Pobieram dane, czyszczę z różnych śmieci, robię explode po "," i mam tagi w tabeli. Teraz zaczynają się schody. Dla każdego taga robię trim i sprawdzam czy jest w tabeli "tagi". Zależnie od wyniku: - jeśli jest to pobieramy id_tagu - jeśli nie ma to dodajemy do tabeli i pobieramy nowoutworzone id_tagu Do tabeli "wpisy_tagi" wrzucamy id_wpisu, id_tagu Jak to najoptymalniej rozwiązać? Pobrać całą zawartość tabeli "tagi", czy też może dla każdego tagu tworzyć osobne zapytanie sprawdzające? Orientacyjnie każdy wpis będzie miał do kilkunastu tagów, wpisów może być sporo więc sama tabela "tagi" po pewnym czasie urośnie. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Ten post edytował CuteOne 26.01.2013, 15:20:39 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Cytat - jeśli jest to pobieramy id_tagu - jeśli nie ma to dodajemy do tabeli i pobieramy nowoutworzone id_tagu Obie te rzeczy możesz też załatwić INSERT INTO ... ON DUPLICATE KEY UPDATE W przypadku, gdy w bazie danych duplikaty stanowią mniej niż 70% danych, to zapytanie zaprezentowane tutaj będzie szybsze od powyższego z SELECTEM. Jeśli po pewnym czasie tagi będą się już mocno powtarzać, lepiej zastosuj SELECT w celu filtracji i później dopiero INSERT na danych nieistniejących. Wyliczenia opieram na własnych testach, więc przy różnych danych mogą się różnić. Ten post edytował sabat24 26.01.2013, 17:19:36 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 22:25 |