| | |
| Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
Autor | Správa |
---|
Registrovaný: 30.09.07 Prihlásený: 30.11.11 Príspevky: 143 Témy: 37 | Napísal Feko: 19.05.2010 17:02 | |
|
Zdravím. Som opäť s logikou v koncoch. Posúďte sami.
Z indexu volám do výpisu $page->RenderSortiment();
Rendder sortiment vyzera nasledovne:
Kód: function RenderSortiment() { global $app; $sqlQuery = "SELECT S.*, count(S.ID) FROM clSortiment S INNER JOIN Product P ON P.clSortiment=S.ID WHERE S.DateValidTo IS NULL AND P.DateValidTo IS NULL AND S.nadkat = 0 GROUP BY S.ID ORDER BY Value"; $result = $app->Db->Select($sqlQuery); while ($row = mysql_fetch_object($result)) {
echo " <li><a href='?p=sortiment&id=$row->ID' title='$row->Value'> " . $row->Value . " »" . "</a></li>\n"; if ($row->ID == $this->id) // generovanie submenu { $this->RenderSortimentSub($row->ID); } } } Tu je to myslim zrozumitelne. RenderSortimentSub som prerobil v ramci logiky- Selectnem kategoriu podla jej ID, pozriem sa na jej nadkategoriu, zapisem ju do pola. To iste spravim s dalsou nadkategoriou az po nultu uroven. Takto naplnene pole dam potom na foreach vypis, kde volam RenderSortimentSub pokial v poli nieco je( moj prepracovany mozog si mysli, ze by tym padom malo vypisat vsetky podkategorie zainteresovanych kategorii:) Kód: function RenderSortimentSub($sortimentId) { global $app; $sqlQuery = "SELECT * FROM `clSortiment` WHERE ID = $sortimentId"; $result = $app->Db->Select($sqlQuery); $row = mysql_fetch_object($result); global $poleNadkat; $poleNadkat[] = $row->nadkat;//Pridam ID povodne volanej polozky menu $this->SelectNadkat($row->nadkat);
echo "<ol>»"; $sqlQuery = "SELECT * FROM `clSortiment` WHERE nadkat = $sortimentId"; $result = $app->Db->Select($sqlQuery); while ($row = mysql_fetch_object($result)) { echo " <li><a href='?p=sortiment&id=$row->ID' title='$row->Value'> " . $row->Value . " " . "</a></li>\n";
} echo "»</ol>\n"; // foreach ($poleNadkat as &$value) { // Zabespecenie rekurzie funkcie // $this->RenderSortimentSub($value); //}
}
function SelectNadkat($nadkategoria) //Plnim zasobnik volani funkcie tvorby menu { global $app; $sqlQuery = "SELECT * FROM `clSortiment` WHERE ID = $nadkategoria"; $result = $app->Db->Select($sqlQuery); $row = mysql_fetch_object($result); global $poleNadkat; $poleNadkat[] = $row->nadkat;//Pridam cislo nadkategorie do pola if ($row->nadkat != 0) // overenie konca rekurzie funkcie { $this->SelectNadkat($row->nadkat);
} }
Dufam ze som tu dal vsetko relevantne. Dajte mi prosim vediet ci na to idem velmi zle alebo len trochu. Vdaka
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 20.05.2010 8:59 | |
|
_________________ Sorry za prelkepy |
|
Registrovaný: 30.09.07 Prihlásený: 30.11.11 Príspevky: 143 Témy: 37 | Napísal autor témy Feko: 20.05.2010 15:17 | |
|
Jasne že pomôže. Omnoho elegantnejšie riešenie do akého som sa púšťal. Staćilo dorobiť spomínané pole na načítanie všetkých nadkategórií v selekte a už to funguje ako postupne vyklikávateľné riešenie. Vďaka
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 20.05.2010 15:44 | |
|
nooooooo testoval to uz niekto pri tabulke s objemom niekolko desiatok az stoviek MB ? nacitat cely obsah velkej tabulky pre ziskanie stromu z ktoreho realne mozno potrebujeme len jednu vetvu je dost riskantne
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 Bydlisko: Nitra / Bra... | Napísal emer: 21.05.2010 8:34 | |
|
tak neviem ci niekto bude vypisovať strom s niekoľko stotisícov záznamov.
ale možno narážaš na to, že existuje aj takéto riešenie:
http://articles.sitepoint.com/article/h ... a-database
lenže pokiaľ je v DB iba pár desiatok (alebo stoviek) záznamov, nevidím dôvod, prečo by som nemal používať tamto riešenie
_________________ Sorry za prelkepy |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 21.05.2010 8:40 | |
|
no ved ja som pisal ze v pripade VELKEJ tabulky moj prispevok bol len upozornenie ze tvoj sposob nemusi byt univerzalne najlepsi a treba si uvedomit co to moze sposobit v pripade velkej tabulky. videl som tabulky ktore boli takto organizovane a boli velke lebo vnich bola cela organizacna struktura pomerne velkej firmy samozrejme v pripade malej tabulky bude tvoje riesenie vykonnejsie
|
|
Registrovaný: 30.09.07 Prihlásený: 30.11.11 Príspevky: 143 Témy: 37 | Napísal autor témy Feko: 22.05.2010 1:37 | |
|
Neviem ci si si vsimol moju poznamocku o poupraveni selektu. Tym padom vyberam vzdy len to, co realne na zobrazeni potrebujem. Nic viac.
|
|
Registrovaný: 30.09.07 Prihlásený: 30.11.11 Príspevky: 143 Témy: 37 | Napísal autor témy Feko: 22.05.2010 1:41 | |
|
Mimochodom, este stale s temou suvisiaca otazka...
Viete mi niekto povedat preco mi nacita to pole v poradi od najmensej ID?? Podla mna na to nema ziaden dovod. V manuali pisu, ze implode to dava do selektu v takom poradi, a akom su v poli ulozene polozky. Tak nechapem.
Kód: $Select = mysql_query("SELECT * FROM clSortiment WHERE ID IN ('" . implode("', '", $poleNadkat) . "') AND DateValidTo IS NULL AND ID != 0 "); //Selektnem len to co sa po danom stlaceni vypisat ma. Vsetky chcene kategorie v aktualnom strome while($Row = mysql_fetch_assoc($Select)){ $Arr[$Row['ID']] = $Value['ID'];
}
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
implode ano, ale IN pracuje inak ako by si mozno ocakaval
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 30.09.07 Prihlásený: 30.11.11 Príspevky: 143 Témy: 37 | |
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
vysledok sa ti vrati v poradi, ako su jednotlive zaznamy ulozene v tabulke, a nie podla poradia uvedeneho v IN... ak chces zachovat nejake poradie, tak to poradie mozes pouzit napr. v ORDER BY
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 30.09.07 Prihlásený: 30.11.11 Príspevky: 143 Témy: 37 | Napísal autor témy Feko: 22.05.2010 12:35 | |
|
Hmm, a to uz tazko prerobim... Na aktualnu podstranku vypisujem jednotlive urovne stylom- Hlavna stanka» Podkategoria».....» Aktualna stranka
A ked mi to poprehadzuje, je cely vypis na hlavu. Dalo by sa to pole "preusporiadat" podla toho pola poleNadkat co vkladam do query? Este takuto vidim moznost, len neviem ci to je mozne...
Order ma napadol ako prvy, ale vtlacit tam logiku- vypis podla poradia v akej su naveznosti (ktora je cia nadkategoria) sa mi zda nepreveditelne.
|
|
Registrovaný: 30.09.07 Prihlásený: 30.11.11 Príspevky: 143 Témy: 37 | Napísal autor témy Feko: 22.05.2010 15:37 | |
|
Opät par hodin patrania, spekulovania a skrabania si lavou nohou prave ucho, ale nakoniec som sa "vratil ku korenom" a vcelku elegantne sa to cez ten ORDER samozrejme dalo... Tu je vysledny selekt, nech to podobneho nestastnika ako ja pre buducnost inspiruje:
Kód: $Select = mysql_query("SELECT * FROM clSortiment WHERE ID IN ('" . implode("', '", $poleNadkat) . "') AND DateValidTo IS NULL ORDER BY ID = '" . implode("'DESC, ID = '", $poleNadkat) . "'");
Ten vyberie za pomoci zadavaneho ID vsetky relevantne kategorie aj nadkategorie pomocou vypisu pola poleNadkat a usporiada query v poradi tohto pola(Nech sa nestane tak ako mne, ze to odbura logicku postupnost kategorii.)
Tak opat dik Sten za usmernenie.
Majte pekny den.
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 23.05.2010 20:02 | |
|
no problem bude vtom ze associativne polia vacsinou vykonavaku zoradovanie podla svojho indexu cize ak do pola vlozis polozku s indexom 'b' a nasladne 'a' tak pri vybere ti aj tak ako prvu polozku vrati 'a' az potom 'b'
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
to je blbost
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
| Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|