Just nu i M3-nätverket
Gå till innehåll

WHILE-sats-problem


Rixn

Rekommendera Poster

Jag har ett programmeringsproblem. Jag kör ju PHP, men mitt problem är nog lika oavsett språk. Jag har en highscore-lista som ligger i en MySQL-databas och jag vill räkna ut en massa värden som t ex placeringspoäng.

 

Som jag har det nu så räknar jag ut alla värden för varje resultat genom att jag loopar dem genom en WHILE-sats, Då kan jag räkna ut det mesta genom att jag för varje loop hämta nästa resultat i den sorterade listan och samtidigt ha en räknare som räknar upp med 1 varje gång. Då får jag t ex placeringen förutom då det är flera spelare som har samma resultat. I de fallen sätter jag samma plats tills min lilla "sammaResultatRäknare" talar om att det är ett nytt resultat igen och sedan fortsätter jag att räkna upp.

 

Problemet

Jag vill räkna ut en reducering (ett procentvärde under 100 %) baserat på hur många som har samma resultat, men jag kan inte komma på något sätt att göra det inuti WHILE-satsen, för när jag stöter på första dubbletten vet jag ju inte hur många fler med samma resultat som kommer, och när jag vet hur många det är har jag ju loopat förbi alla de tidigare så då missar jag ju chansen att ändra dem.

 

Iofs kan jag väl använda "sammaResultatRäknaren" till att skriva över de tidigare raderna, men då måste jag ju spara undan dem någonstans och så gör jag inte i nuvarande kod. Där skrivs de ju ut direkt i HTML-formuläret som skickas tillbaka till användarens webbläsare. En annan metod jag funderat på är att spara undan alla "samma"-värden men hur ska jag göra det bäst - en variabel med informationen lagda efter varandra skilda åt med ett komma eller en "array" (vilket jag inte gjort så mycket i PHP) eller ska jag spara undan dem i någon form av temporär databas-tabell - i så fall hur?

 

Kan någon hjälpa mig på traven?

Finns det andra, smartare sätt?

 

Länk till kommentar
Dela på andra webbplatser

Här tycker jag helt klart att du skall använda en array, spara ner all data som är intressant och komplettera med ännu en while-loop som loopar igenom arrayen med all data med "samma värden".

 

http://se2.php.net/manual/sv/language.types.array.php

 

<?php
$colors = array('red', 'blue', 'green', 'yellow');

foreach ($colors as $color) {
  echo "Do you like $color?\n";
}

?> 

 

Länk till kommentar
Dela på andra webbplatser

Tyvärr inte svar på din fråga men jag tolkar det som att du gör alla beräkningar i PHP, i mySQL kan du ju utföra beräkningar och få ut de i en ny temporär kolumn, t.ex summera poäng, räkna procent osv.

 

Kanske hade rensat upp din kod lite och eventuellt gjort sidan snabbare då databashanterare är duktiga på summering osv...

 

Länk till kommentar
Dela på andra webbplatser

Ok tack, det var det jag misstänkte att bästa alternativet är en array.

 

Finns det någon gräns för hur många poster en array max klarar av eller när det blir segt så pass att en annan metod är att föredra?

 

[inlägget ändrat 2006-12-14 14:42:51 av Rixn]

Länk till kommentar
Dela på andra webbplatser

Med risk för att framstå som den noob jag är men inte riktigt vill erkänna måste jag fråga för att kläm på det hänger ihop...

 

Hur gör jag beräkningar i MySQL och vad är en databashanterare (förutom att den hanterar databaser förstås)?

 

Jag har alltid använt PHP, inbakat i HTML eller rena PHP-sidor när jag micklat med MySQL sen använder jag phpMyAdmin för att administrera databasen - är det en databashanterare?

 

Hur gör man? Använder man något annat språk som man skriver i filer och laddar upp på servern eller är det ett verktyg där man gör inställningar?

 

 

Länk till kommentar
Dela på andra webbplatser

Förlåt om jag förvirrar dig, databashanterare är programmet som hanterar en databas, i ditt fall mySQL, hade kunnat vara MSSQL osv...

 

Här är ett exempel på beräkning i SQL

SELECT PersonID, FirstName, SUM(resulttable.Points) AS UserPoints FROM persontable LEFT OUTER JOIN resulttable ON persontable.PersonID = resulttable.Personid GROUP BY resulttable.PersonID ORDER BY UserPoints DESC

 

Här tänker jag mig en tabell med användare (persontable) och en tabell med någon form av resultat (resulttable).

 

UserPoints kommer då vara användarens summerade poäng från tabellen resulttable, LEFT OUTER JOIN betyder att även användare utan post i resultattabellen kommer med, annars hade inte dessa kommit med i resultsetet.

 

Självklart kan man använda *, +, -, /, i sqlfrågan också om man vill det.

 

Hoppas det klarnade lite iallfall, håll dig till det som är smidigast för dig annars om det funkar.

 

Länk till kommentar
Dela på andra webbplatser

Ok, så MySQL är databashanteraren och jag använder dess kod för att kommunicera med den.

 

1a) I PHP kan jag ju komma åt databasen. Är det bara delar av all kod jag kan använda inuti PHP-koden eller kan man använda allt?

 

1b) Är det exakt samma syntax eller är den anpassad speciellt för PHP - typ väldigt lika i grunden men ändå PHP-specifik?

 

2a) Om jag vill att databasen ska göra en beräkning efter att en post blivit uppdaterad då den fått nya värden från en webb-php-sida som en användare "submittat", VAR skriver jag den koden som gav exempel på (SELECT PersonID...)?

 

2b) Hur får jag den koden att exekvera automatiskt, dvs VAR skriver jag kallelsen på den koden?

 

2c) Kan jag få sådan kod att köras automatiskt (och regelbundet) utan att den får anrop från en webbsida?

 

Länk till kommentar
Dela på andra webbplatser

En kortis om WHILE-satsen till bara..

 

Hur kommer jag åt ett värde från kommande varv när jag inne i den nuvarande?

while ($rad = mysql_fetch_array ($Listan)) {    
   print $rad['theValue'];          // the value from the current row
   print $rad['theValue' + 1];    // ?
   print $rad['theValue'] + 1;    // ?
   print $rad + 1['theValue'];    // ?
...

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...