Jump to content

PHP niks no ranka


Sunriset
 Share

Recommended Posts

Labdien, esmu izveidojis sekojošu funckiju, kas nosaka spēlētāja auģsup,lejup slīdi rankā

 

ir tabula, kurā glabājas spēlētāja niks, līmenis uc atribūti, reizi nedēļa no šīs tabulas iekš citas tabulas izkopējas spēlētāja niks un vietā rankā

 

Pēc tam salīdzinu, par cik cēlies vai krities spēlētājs topā.

 

Man būtu vajadzīgs noskaidrot kurš spēlētājs ir visaugstāk pakāpies topā, kā to vislabāk panākt?

 

Pašlaik koda daļa, kas nosaka par cik krities, cēlies spēlētājs topā izskatās apmēram šādi:

$get_data = mssql_query("SELECT TOP 50 name,level FROM players ORDER BY level desc");	
while($row = mssql_fetch_array($get_data)){
	++$vietatopa;


//Changes in top
$CINTOP = mssql_query("SELECT name,rank FROM DUPLICATE_RANK where Name = '".$row[0]."'");	
$CINTOP = mssql_fetch_row($CINTOP);


if ($CINTOP['1'] == $vietatopa){
echo "";
}
elseif ($CINTOP['1'] > $vietatopa){
	$parcik=$CINTOP['1']-$vietatopa;

echo "<a href=\"\" onmouseover=\"Tip('+".$parcik."',OPACITY, 50)\" onmouseout=\"UnTip()\" ><img src='images/icons/arrow-up.gif'/></a>";
}
elseif ($CINTOP['1'] < $vietatopa){
	$parcik=$vietatopa-$CINTOP['1'];
echo "<a href=\"\" onmouseover=\"Tip('-".$parcik."',OPACITY, 50)\" onmouseout=\"UnTip()\" ><img src='images/icons/arrow-down.gif'/></a>";
}
else {
echo "ERROR";
}


//

}

Paldies jau iepriekš

Labots - Sunriset
Link to comment
Share on other sites

pieglabā masīvā player => diff, sakārto dilstoši un izvadi pirmo. bet nu pa lielam šausmas esi uzrakstijis. Tev taisa atsevišķu kveriju katram spēlētājam while loopā, kas ir liels no no, to var nooptimizēt un jau pie $get_data ar 1 kveriju dabūt pašreizējo pozīciju, veco un visu pārējo, ko vajag ar JOIN un pēc tam manipilēt ar datiem php pusē- pārkārtot pēc lielākā kāpuma, dabūt diffu katram spēlētājam utt.

  • Patīk 1
Link to comment
Share on other sites

tas kods tiešām ir šausmas...

Link to comment
Share on other sites

nu tātad pamatskolā nemācījos gramatiku un tāpēc šādi ķēmojos man te uz iphone naw sql server, bet man informaatikas skolotaajs maaciija, ka vajadzeetu dariit kaut kaa taa :> 

 

 

 

 
SELECT TOP 1 ROW_NUMBER() OVER (ORDER BY p.level DESC) AS current_rank, p.name, d.rank as old_rank, (current_rank - old_rank) AS rank_delta  
FROM players p
INNER JOIN duplicate_rank d ON d.name = p.name 
ORDER BY rank_delta DESC 
 
Link to comment
Share on other sites

Liels paldies par Jūsu padomiem, un ieteikumiem, tieši tādēļ es esmu šeit, lai uzzinātu ko jaunu un uz priekšu nepieļaut tādas ķļūdas.

 

Mēģināju DjUbuntu ieteikto variantu, bet man atgriež kļūdu

mssql_query() [function.mssql-query]: message: 'ROW_NUMBER' is not a recognized function name. (severity 15) 

Pētīju vēl dažādus variantus internetā par ROW_NUMBER, bet īsti pie skaidrības netiku

Link to comment
Share on other sites

Dzīvoju vēsturē 2000 sql,

 

vai ir iespējami kādi varianti uz šo versiju? ar laiku ir doma pāriet uz jaunāku sql, bet pagaidām nav resursu uz kā uzlikt jaunāku

Link to comment
Share on other sites

  • 3 weeks later...

Jautājums vēl aktuāls, vai ir vēl kāds risinajums, paldies par Jūsu ieteikumiem jau iepriekš

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...