![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 15.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę z polami "tag" oraz "produkt". Może się zdarzyć że produkty maja takie same tagi, a więc zawartość pola tag często sie powtarza.
Chciałbym pobrać 5 najpopularniejszych tagów, ale nie chcę pisać 5 osobnych zapytan tylko optymalnie zmiescic sie w jednym. Na razie mam coś takiego:
Jak najlepiej dodać do tego pobieranie ilości wystąpień tagu? No i oczywiście jak ułożyć WHERE żeby pobrało 5 najpopularniejszych? Ten post edytował Haczyk67 5.12.2009, 15:55:35 |
|
|
![]() |
![]()
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 ![]() |
Przy podziale:
Produkt (id, nazwa) Tag (id, nazwa) ProduktTag (id_produkt, id_tag) Nie ma żadnych duplikatów. Dlaczego? Wyjaśnię bo sam tego używam ( w nieco innej wersji ) i napisze JAK używam. Jeśli to UPDATE to wpierw usuwasz wszystkie wpisy w ProduktTag z danym id produktu. Potem robisz z tagów tablice (explode gdzie przecinek to delimiter), trimujesz elementy i robisz array_unique (IMG:style_emoticons/default/smile.gif) Teraz tylko pozostaje stworzenie wpisów w ProdutTag. Jeśli to INSERT nowego produktu to nie usuwasz wcześniej z ProduktTag nic. Kluczem jest tutaj zastosowanie przed zapisem do bazy sprawdzenia czy dany tag już istnieje w bazie. To kwestia zapytania do bazy i później użycia tego co dostałeś i array_diff oraz zapisu nowych tagów do bazy tagow. Sam podobnie robię bez jakichkolwiek dubli w bazie. Kwestia to przemyślany dobrze algorytm. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 17:56 |