Jump to content
php.lv forumi

Problēma ar skaitļu apreiķiniem


Lynx

Recommended Posts

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

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

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

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

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

×
×
  • Create New...