Lynx Posted March 30, 2005 Report Share Posted March 30, 2005 Izvilkums no datubazes: Id: 1 Mums: 1 = Nakamais: 2 Id: 2 Mums: 0 = Nakamais: 3 Id: 3 Mums: 0 = Nakamais: 0 Id: 4 Mums: 1 = Nakamais: 0 Id: 5 Mums: 1 = Nakamais: 6 Id: 6 Mums: 0 = Nakamais: 0 Id: 7 Mums: 1 = Nakamais: 8 Id: 8 Mums: 1 = Nakamais: 9 Id: 9 Mums: 0 = Nakamais: 0 Tātad situācija šada: ir ieraksti datubāze un tie būtu jaizvada pēc noteiktiem kritērijiem. Tātad, piemeram, tur kur id 1: Mums = 1, tas nozimee, ka jaizvada ieraksts ar id 2(to nosaka pēc ailes Nakamais), nevis ar 1. Ja id 2: Mums: ir vienads ar 0, tad izvadītais id ari paliek par 2, bet ja Mums būtu bijis = 1, tad šī ieraksta vietā un ieraksta vietā ar id =1 ir jaizvada ieraksts ar id 3. Tur kur aile Mums = 0, talak nemaz neskatāmies un izvadam tā paša ieraksta id. Pagaidam pec ilga darba un vairakiem testiem ir shads kods: if($mums['upg_'.$m.''] == 0 || $upg['next'] == 0) //ar šo mes izpildām 2us uzdevumus izvadam tikai tos ierakstus kuriem nākmais == 0, un nakamos pec musu esoshaa id. //vel janogriež iespēju redzēt id tālāk par vietu kur mums =0 { $upgrade_list = 'blabla teksts'; } else { $upgrade_list = ''; } Problēma šāda: nesanāk uzrakstīt ifu no dotajiem parametriem, lai tiktu rādits tikai ieraksts ar nakamo id(šajā gadijumā 2), pašlaik tiek rādits gan ieraksts ar id 2, gan arī id 3, kuru nevajag rādīt zem dotajiem apstākļiem. Ir idejas kā dabūt gatavu, lai netiktu rādīti ieraksti līdz kuriem mēs vel neesam tikuši? Eh, cerams ka domu sapratāt :) Link to comment Share on other sites More sharing options...
Kavacky Posted March 30, 2005 Report Share Posted March 30, 2005 A nevar tos apgreidus pēc kārtas likt? Tad, ja tev ir jau 3. līmenis, tu uzreiz zini, ka tālāk iet 4. Link to comment Share on other sites More sharing options...
Lynx Posted March 30, 2005 Author Report Share Posted March 30, 2005 Nu īsākos vārdos sakot tāda arī ir tā ideja. Bet diemžēl nesanāk, jo jaņem vēra kaudze papildapstākļi. Piemēram tas ka nevisiem upgreidiem ir talāks līmenis, bet dažiem ir pat vairāki un attiecīgi tie tālākie būtu japiegriež. Un vienkārši vairs nav ideju kā to panākt gatavu, jo visas manējās ir izgāzušās. :/ Link to comment Share on other sites More sharing options...
Kavacky Posted March 30, 2005 Report Share Posted March 30, 2005 Tātad vajag nevis vienkārši "next", bet gan koks ar zarošanos. 1 ---------|---------- | | 2 3 | ------|------ 4 | | 5 6 Cik es sapratu tavu sistēmu, tad šitā neies cauri, jo tev tur katram sanāk tikai viens "nākamais" apgreids. Tipa 1 -> 2, bet vajag arī 3 ( 1 -> 2; 3 ). Vajag glabāt visus apgreidus atsevišķi, turpat glabāt arī requirementus katram apgreidam. Pēc tam skatās, kādi apgreidi lietotājam jau ir, pēc tā atrod to, kādus viņš var dabūt tālāk. Link to comment Share on other sites More sharing options...
Lynx Posted March 30, 2005 Author Report Share Posted March 30, 2005 Man šķiet tu mani nedaudz pārprati, pēc struktūras sanāk šādi(numuri ir katra ieraksta id): 1ais upgreidu koks 1 -> 2 -> 3 2ais upgreidu koks 4 3ais upgreidu koks 5 -> 6 Koku skaits neierobežots, atkarīgs no tā cik tiek salikts datubāzē. Koki nesazarojas un nākamais ieraksts atarīgs no iepriekšējā. Izanalizēsim pirmo koku: Ja mums nav neviens ieraksts no koka, tad tiek rādits ieraksts ar id 1, ja mums ir 1, tad rādam ierakstu ar id 2, bet ne 1 vai 3, ja mums ir ieraksts 3, tad rādam tikai 3(jo koks vairāk neturpinās). Attiecīgi pilnais, daļēji strādājošais kods, attiriju no visa liekā - izstrādes procesā radīta: $m = 0; $upgrades = mysql_query("SELECT id, name, level, next FROM upgrades"); while ($upg = mysql_fetch_array($upgrades)) { $m++; $mums = mysql_fetch_assoc(mysql_query("SELECT upg_".$m." FROM ships_upgrades WHERE id = ".$ship_id."")); if($mums['upg_'.$m.''] == 0 || $upg['next'] == 0) { $upgrade_list = '<td width="25"><a href="pilseta.php?apm=shipyard&upgrade='.$upg['id'].'&kugi='.$_GET['kugi'].'" title="'.$upg['name'].' '.($upg['level'] != 1 ? 'lvl '.$upg['level'].'' : '').'"><img src="./dizains/upgrades/upg_'.$upg['id'].'.jpg" height="25" width="25" border="0"></a></td>'; } else { $upgrade_list =''; } Un šeit rodas problēma, jo mums jāskatās uz nākamo ierakstu vairākus soļus uz priekšu. Piemēram ja mums ir id 1, tad mums jāparbauda vai aile next !=0, ja nav tad jāizsledz no izvades nākamais id un atkal japarbauda aile next jau nākamajam id un janoskaidro vai koks neturpinās, kamer tiek izslegtas visas tālakas vertības. Un šo vietu nesanāk dinamiski uztaisīt, jo katram kokam ir savādāks ierakstu daudzums. Link to comment Share on other sites More sharing options...
bubu Posted March 30, 2005 Report Share Posted March 30, 2005 Es galīgi un absolūti nesaprotu šito datu struktūru. Un arī tieši kam tādu vajag pielietot, varbūt vienkārši var ko vienkāršāku izdomāt? Link to comment Share on other sites More sharing options...
Venom Posted March 31, 2005 Report Share Posted March 31, 2005 vo-vo katrā gadījumā izskatās ka vieglāk būtu no sākuma nofečot visu tabulu un tad jau rekursīvi darboties ar masīvu Link to comment Share on other sites More sharing options...
Lynx Posted March 31, 2005 Author Report Share Posted March 31, 2005 Heh rīts kā vienmēr gudrāks par vakaru! Atrisinājums arī bija diezgan vienkāršs, izveidoju aili previous un pēc tam katram ierakstam salidzinu vai mums ir iepriekšējais ieraksts. Ja ieraksta nav tad neizvadam. Praktiski tagad izvade tiek pārbaudīta no 2iem galiem. Paldies Kavacky, jo meiģinot visu paskaidrot citam cilvēkam nāca lielāka saprašana kā to dabūt gatavu. Pareiza problēmas definēšana jau ir 1/2 no atrisinājuma. Link to comment Share on other sites More sharing options...
Recommended Posts