ďťż
Podstrony
|
telcocafeDotychczas chyba nigdy nie pytałem się jak coś rozwiązać, gdyż wszystko udawało mi się rozwiązać samemu lub znaleźć w sieci. Tym razem muszę spytać, gdyż nie potrafiłem znaleźć nic ciekawego na ten temat, a może po prostu nie potrafię tego dokładnie określić. Ale do rzeczy:Jestem w trakcie tworzenia aplikacji przy użyciu CodeIgniter i modelu Nested sets do tego frameworka. Tabela kategorii wygląda tak: CREATE TABLE `categories` ( `id` smallint(6) NOT NULL auto_increment, `name` varchar(100) default NULL, `description` varchar(255) default NULL, `leftval` int(5) NOT NULL, `rightval` int(5) NOT NULL, PRIMARY KEY (`id`) ) Sama obsługa tego modelu kategorii nie przysparza problemów, jednak problem pojawił się kiedy mój znajomy zaproponował stworzenie obsługi artykułów, ale z opcją wyboru nieskończenie wielu kategorii, do których dany artykuł mógłby być przypisany. Uznałem, że najlepszym rozwiązaniem będzie stworzenie nowej tabeli o następującej strukturze: CREATE TABLE `cat_ascribes` ( `articleid` int(11) NOT NULL, `categoryid` smallint(6) NOT NULL ) Do tej tabeli zapisywane by były informacje o id artykułu i kategorii, co zresztą łatwo odczytać. Jednakże zapisywane by było tylko ID kategorii najniżej położonej w drzewie. I wszystko byłoby ładnie, ale... tu właśnie jest sedno problemu. Mając takie kategorie:
ll[5]Częstochowa[6]l CREATE TABLE `articles` ( `id` int(11) NOT NULL auto_increment, `title` varchar(255) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ) Nie potrafię wymyślić dobrego sposobu na odczytanie wszystkich artykułów z podkategorii danego węzła. Przykład: do kategorii Informacje->z regionu->Opole i Informacje->z regionu->Częstochowa mam przypisane po 2 pozycje, które tyczą się obu miast(czyli 2x to samo articleid z innym categoryid w tabeli cat_ascribes), oraz po jednym artykule oddzielnym. Chciałbym odczytać wszystkie te 4 wpisy, przechodząc do kategorii Z regionu. Rozumiem, że najpierw należałoby pobrać id wszystkich podkategorii(czyli id Częstochowa i Opole), a następnie pobrać pozycje których categoryid = id tych kategorii. Jak to zrobić najoptymalniej? Może ktoś już opracował takie rozwiązanie i wyszło mu to lepiej? Czekam na informacje i z góry za wszystkie dziękuję. Użytkownik marrek13 edytował ten post 18 sierpień 2007, 11:01 pogooglaj za -> drzewa mysql php Bełdzio, czy przeczytałeś chociaż mój post? Nie mam problemów z drzewkami mysql, ale z tym, jak pobrać dane ze wszystkich podkategorii, kiedy w grę wchodzi przypisanie danej pozycji do wielu kategorii. Jeśli dobrze zrozumiałem... A nie myślałeś najprościej :P ? Dajesz jedną komórkę dla każdego artykuł i tyle :P Nazwij ją np. cats i do niej pakuj IDy kategorii wraz ze znakiem oddzielającym, np. "1|345|34|65" - poza tym, mogą tu być również IDy podkategorii. Jak to oprogramujesz w PHP to zależy od Ciebie :) A jeśli chcesz wyszukać te same IDy czy coś, pobierasz wszystkie komórki, explodujesz i szukasz tych samych :P Jakoś to da się zrobić, jednak pewności nie mam, czy w ogóle poprawnie zrozumiałem Twój problem ;) Zrozumiałeś poprawnie, ale... nie do końca ;) Sposób przedstawiony przez Ciebie jest jak dla mnie jeszcze gorszym rozwiązaniem, bo przy dużej ilości artykułów pobieranie całej bazy aby wyszukać odpowiednie mija się z celem i niepotrzebnie obciąża serwer(nie jestem żadnym maniakiem wydajności, tylko w tym wypadku różnica byłaby bardzo znacząca, tym bardziej że będzie to duży serwis). Po dłuższym zastanowieniu wydaje mi się, że nie uniknę skorzystania z przynajmniej 2 zapytań do bazy w celu pobrania odpowiednich artykułów, ale poczekam jeszcze trochę, być może ktoś jeszcze zmieni mój punkt widzenia. |
|||
Sitedesign by AltusUmbrae. |