Zadejte hledaný výraz...

Nekonecny cyklus ? Nemozne. poprosim o radu

reverb
verified
rating uzivatele
1. 9. 2011 19:21:21
Ak sa pozrieme na tuto funkciu nieje mozne aby mala nekonecny cyklus a to uz z dovodu:
cyklus while sa vykona vzdy iba raz idcka su zapisovane pomocov uniqueid. v pripade ze narazi na polozku s 0 dalsi cyklus nevykona nieje tym padom mozny v sub_id su zapisovane id nadradenych poloziek. Tym padom polozka s hodnotou 0 v sub_id neexistuje a tym sa cyklus skoncil a dalsie udaje sa nezapisu a nezavola sa znova funkcia.
Takze mi povedzte ako je mozne ze je to zacyklene. Mozno som uz prepracovany a nejako mi to napali .. a nevidim tam nejaku drobnu chybicku dakujem za rady.
---------- Příspěvek doplněn 01.09.2011 v 19:23 ----------
Pre upresnenie jedna sa o nacitanie mapy jednotlivych kategorii ... Je hlavna a v nej moze byt xxx vnorenych kategorii . A potrebujem spetne nacitat cez ktore kategorie presiel nez sa dostal do kategorie v ktorej sa nachadza takze napr Hlavny Strom -> Sub Kategoria1 -> Sub Kategoria 2 -> Sub Kategoria 3 ( v 3jke sa nachadzame )
1. 9. 2011 19:21:21
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673090
no mě se zdá že voláš stále to samé id dokola.
Př. V DB je ID 1, to se ti vypíše a následně voláš znovu samotnou funkci s podmínkou kde id je 1, takže se ti znovu vypíše id 1 a znovu voláš funkci
---------- Příspěvek doplněn 01.09.2011 v 19:44 ----------
aha, já se nevšiml druhého dotazu na db, tak tím to asi nebude
1. 9. 2011 19:37:19
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673089
reverb
verified
rating uzivatele
1. 9. 2011 19:45:23
Prave je mi to velmi divne kedze podobny cyklus som uz niekde urcite robil a takato situacia sa mi nestala.
1. 9. 2011 19:45:23
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673088
no i když nad tim přemýšlím, tak není to tím idečkem?
když by byla databáze id: 1 sub_id: 5
ty zavoláš funkci s parametrem id 1
provede se select sub id a získáš sub_id:5
no a pak provádíš select kde sub_id:5
a získáš zas id 1 a znovu to voláš pod id 1
1. 9. 2011 19:52:40
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673087
reverb
verified
rating uzivatele
1. 9. 2011 19:52:49
http://imageshack.us/photo/my-images/263/tabulkaz.jpg/
Prikladam aj screen tabulky s datmi.
---------- Příspěvek doplněn 01.09.2011 v 19:56 ----------
Napsal Paradiso;696656
no i když nad tim přemýšlím, tak není to tím idečkem?
když by byla databáze id: 1 sub_id: 5
ty zavoláš funkci s parametrem id 1
provede se select sub id a získáš sub_id:5
no a pak provádíš select kde sub_id:5
a získáš zas id 1 a znovu to voláš pod id 1
Nie. Predstav si ze mas 3 polozky kazda ma
ID:1,SUBID:0,NAZOV: Polozka1
ID:2,SUBID:1,NAZOV:Polozka2
ID:3,SUBID:2,NAZOV:Polozka3
Odcykli si to ziskam poslednu polozku subid 2 dosadim id 2 nacita sa mi subid1 dosadim ho do id kde sa mi nacita subid0 ktory neexistuje. Koniec cyklu.
1. 9. 2011 19:52:49
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673086
no a nemělo by to být teda takto:
private function genreMap($id,$c = 0,$map = '')
{
$idc = shared_Db::getDb()->query("SELECT `id`,`sub_id` FROM `category` WHERE `id`='$id'")->fetch_object()->sub_id;
$load_sub = shared_Db::getDb()->query("SELECT `id`,`sub_id`,`name` FROM `category` WHERE `id`='".$idc."' LIMIT 1");
$c++;
while($show = $load_sub->fetch_object())
{
$map = $show->sub_id;
$map = $show->name;
$this->genreMap($map,$c,$map);
}
return $map;
já si nemůžu pomoc, ale ten tvůj příklad mi přijde, že dělá to co jsem ti popsal
1. 9. 2011 20:01:01
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673085
reverb
verified
rating uzivatele
1. 9. 2011 20:12:48
Napsal Paradiso;696660
no a nemělo by to být teda takto:
private function genreMap($id,$c = 0,$map = '')
{
$idc = shared_Db::getDb()->query("SELECT `id`,`sub_id` FROM `category` WHERE `id`='$id'")->fetch_object()->sub_id;
$load_sub = shared_Db::getDb()->query("SELECT `id`,`sub_id`,`name` FROM `category` WHERE `id`='".$idc."' LIMIT 1");
$c++;
while($show = $load_sub->fetch_object())
{
$map = $show->sub_id;
$map = $show->name;
$this->genreMap($map,$c,$map);
}
return $map;
já si nemůžu pomoc, ale ten tvůj příklad mi přijde, že dělá to co jsem ti popsal
'
private function genreMap($id,$c = 0,$map = '')
{
$load_sub = shared_Db::getDb()->query("SELECT `id`,`sub_id`,`name` FROM `category` WHERE `id`='".$id."' LIMIT 1");
$c++;
while($show = $load_sub->fetch_object())
{
$map = $show->sub_id;
$map = $show->name;
$this->genreMap($map,$c,$map);
}
return $map;
}
V tvojom pripade som to urobil takto aj som to skusil ale to nacita iba 1 cast a nezacykli sa to. Ale ked sa na to pozrieme malo by to fungovat ked do id ktore posielame dalej do funkcie davame sub id tak by malo nacitat polozku ktora ma dane sub_id. Ale ono to neurobi....
---------- Příspěvek doplněn 01.09.2011 v 20:28 ----------
Momentalne som to upravil nasledovne
function genreMap($id,$c = 0,$map = '')
{
// $idc = shared_Db::getDb()->query("SELECT `id`,`sub_id` FROM `category` WHERE `id`='$id'")->fetch_object()->sub_id;
$load_sub = shared_Db::getDb()->query("SELECT `id`,`sub_id`,`name` FROM `category` WHERE `id`='".$id."' LIMIT 1");
$c++;
while($show = $load_sub->fetch_object())
{
if($show->sub_id != 'not')
{
$map = $show->id;
$map = $show->name;
genreMap($show->sub_id,$c,$map);
}
else
{
return $map;
}
}
}
Ale nastava tu problem ze funkcia reaguje iba vo vnutri v pripade ze dam var_dump(genreMap(bla bla bla));
Tak vypise NULL . ale v pripade ze var_dump aplikujem vo funkcii namiesto return tak vypise pole s nacitanymi datami.
---------- Příspěvek doplněn 01.09.2011 v 20:48 ----------
Vyriesene tento posledna ukazka je spravna len musite tu $map dostat nejako von a returnom to nepojde.
Ja mam v systeme na pridelovanie funkciu setData()
Ktorou sa mi dostanu data k HTML suborom a podobne. Takz problem vyrieseny :) Dakujem za snahu Paradiso.
1. 9. 2011 20:12:48
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673084
Jakub Hošek
verified
rating uzivatele
(23 hodnocení)
1. 9. 2011 21:06:07
Mu dej + rep :) . Určitě za ní bude rád :)
1. 9. 2011 21:06:07
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673083
Používáte rekurzivní funkci chybně.
Zaprvé vám tam chybí base case, při kterém se rekurze začne vracet,
zadruhé ignorujete návratovou hodnotu, takže ta funkce volá sama sebe úplně zbytečně,
a zatřetí volat rekurzivně databázi není dobré pro výkon.
V posledním příkladu jste už doplnil base case, ale spoléhat na to, že je suboptimální.
Takhle na rychlo bych doporučil
Načtěte si celou strukturu na jeden dotaz, vytvořte si pole, které vypadá takto
a pak pracujte s ním.
Nebo se podívejte, jak fungují nested sets, specializovaná struktura na rychlé čtení hierarchických dat.
http://gen5.info/q/2008/11/04/nested-sets-php-verb-objects-and-noun-objects/
2. 9. 2011 12:30:13
https://webtrh.cz/diskuse/nekonecny-cyklus-nemozne-poprosim-o-radu#reply673082
Pro odpověď se přihlašte.
Přihlásit