![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 222 Pomógł: 2 Dołączył: 10.07.2007 Ostrzeżenie: (10%) ![]() ![]() |
witam,
mam tagi np. -tag1 -coś tam 2 -test 3 I chcę znaleźć artykuł, który posiada najwięcej danych tagów (np. artykuł , który ma wszystkie tagi wyżej wymienione jest pierwszy) Jak to osiągnąć najskuteczniej? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Problemem pomysłu wNogachSpis jest aktualizacja danych. W przypadku edycji musisz bowiem pobrać wiersze tagów gdzie ów artykuł jest i w razie czego go z nich usunąć i ewentualnie dodać do innych, uprzednio sprawdziwszy, czy taki tag już nie istnieje. Całość więc wygląda tak:
Pobierz wszystkoie wiersze tagów powiązane z artykułem. Sprawdź czy obecnie wpisane się pokrywają. Jeśli w nowych jakiś jest inny to znajdź czy jest w bazie ten tag i dodaj artykuł do niego. Jeśli w starych tagach jest jakiś, którego nie ma w nowych to usuń artykuł ze starych. W efekcie rozwiązanie to ma sens jedynie dla baz gdzie retencja tagów nie jest duża, bo może dojść do sytuacj, że większość operacji to będzie aktualizacja struktury tagów. A to Ci zarźnie maszynę bo całe działania masz rozbite zarówno na php jak i bazę. Wyszukiwanie identycznie, tylko że tu zamiast insert-update masz same selecty. Musisz przemyśleć co będzie wydajniejsze. A co do sytuacji gdy masz kolumnę tagi: "tagA, tagB, tagC" to owszem, masz nadmiarowość, ale czasem taka jest lepsza w ostatecznym rozrachunku niż optymalizacja na siłę by baza nie miała redundantnych danych i cudowanie choćby z tabelami łączącymi. Możesz wylać dziecko z kąpielą i dopiero wtedy bazę zajedziesz niesamowicie. Sam powiedz... Dla forum mam za każdym zapytaniem liczyć ile postów ma użytkownik czy lepiej tę liczbę zapisać w jego profilu? A tu mamy podobny przypadek. I tak - rozumiem Twoje podejście i rozumiem, że jest lepsze niż niektóre pomysły "optymalizatorów" (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 07:25 |