28. december 2011 - 10:35Der er
12 kommentarer og 1 løsning
MySQL query til PHP array hjælp!!
Jeg sidder fast i et lille script som skulle oprette et array i PHP på basis af et MySQL query. Jeg har en database hvor der er forskellige (dynamisk opdaterede) servere der indrapporterer statistikker om spillerne på dem. Jeg vil derfor gerne lave en samlet "score" fra hver eneste server, og jeg tænkte at lave et PHP array, eller retter sagt to, et for serverne og et for scoren. array nummeret skulle være det samme, så Server_array[25] havde sin score represænteret i ServerScore_array[25] for nemhedens skyld. Her er det så filmen knækkede for mig, jeg får fint reply fra databasen, men det kniber gevaldigt med at holde styr på mine arrays :-( .... mit script generere en linie for hver entry i databasen og ikke kun for hver server som jeg gerne vil have den til.
her er min kode:
<center> <?php
$con = mysql_connect("localhost", "user", "pass"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("db", $con);
//Compute CTF servers: $query = "SELECT Server,Seconds,Score FROM CTF"; $result = mysql_query($query) or die('Error, query failed');
$NumArray = 0; $i = 0; $bFound = "False";
while($row = mysql_fetch_array($result)) { for ( $i = 0; $i <= NumArray; ++$i ) { //check if server already exists if ( $Server_Array[$i] == $row['Server'] ) { //server found, add values $ServerScore_Array[$i] = $ServerScore_Array[$i] + $row['Score'] + $row['Seconds']; $bFound = "True"; } } if ( $bFound == "False" ) { //Server not found, create new array and store values ++$NumArray; $Server_Array[$NumArray] = $row['Server']; $ServerScore_Array[$NumArray] = $row['Score'] + $row['Seconds']; } $bFound = "False"; } //draw the results for ($i = 0; $i < $NumArray; ++$i) { Echo "Server: " . $Server_Array[$i] . " has a score of " . $ServerScore_Array[$i] . "<br />"; } ?> </center>
Er der ikke et trænet øje der kan finde min(e) fejl og få scriptet til kun at liste en linie per server, men med den samlede score ..... og hvis muligt kan man sortere outputtet ud fra denne score i stedet for at lade $i bestemmer rækkefølgen?
Det kom lovligt hurtigt afsted - jeg skulle have spurgt hvad Seconds er. Er der kun en Seconds værdi per server, eller skal du have summen af seconds per server eller hvad? Hvis det er summen af secunds per server du skal bruge bliver det:
SELECT Serer, SUM(Score) AS TotScore, SUM(Seconds) AS TotSeconds FROM CTF GROUP BY Server.
skriv lige et svar begge to, så kan i dele pointene :-)
min fejl i første omgang var rigtigt nok en manglende $ foran NumArray. Men jeg valgte at at omskrive det da jeg jo så at MySQL kunne gøre det hele i et query (som jeg ikke anede eksisterede hehe). Så min kode endte ud i et lidt mindre men mere overskueligt script:
<center> <?php
$con = mysql_connect("localhost", "login", "pass"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("db", $con);
//Compute CTF servers: $query = "SELECT Server, SUM(Score+Seconds) FROM CTF GROUP BY Server ORDER BY SUM(Score+Seconds) DESC"; $result = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result)) { Echo "Server: " . $row['Server'] . " has a score of " . $row['SUM(Score+Seconds)'] . "<br />"; } ?> </center>
#7 du er så beskeden :-) ... jeg bruger pt ikke et sådan program, jeg har vænnet mig til at bruge notepad. Det skyldes at jeg hidtil har været ret begrænset i programmering. Faktisk så er jeg autodidakt i noget der kaldes Uscript som bruge i et gammelt spil som jeg holder meget af. Problemet er at Uscript ikke er et understøttet sprog i de programmer jeg har prøvet det i, så farverne gav ikke rigtig nogen mening og forvirrede mere end de gavnede. Så jeg holder mig naivt til notepad :-P , men efter jeg har valgt at tilknytte eksterne resourcer til spillet og synes rigtig godt om PHP og MySQL kombineret, så vil jeg nok revurdere mit program valg. Har du nogle gode (gratis) programmer some du kan anbefale? vil helst ikke have noget vildt avanceret, så simpelt som muligt virker bedst for mig :-) Jeg har hørt godt om Notepad++, er det et forsøg værd?
Notepad og FrontPage er to programmer fra samme skuffe ... den med udtjent programmel. I hvertfald er Notepad ikke velegnet til moderne programmering/scripting, der oftest foregår med UTF-8 encoding. Da Notepad håndterer tegnsæt og encodings yderst elementært/primitivt, må den efterhånden betragtes som et historisk levn fra vores alles ANSI-fortid =)
Som Erik skriver, er Notepad++ et rigtig godt alternativ. Den har en væsentligt mere moderne håndtering af tegnsæt. Derudover er reglerne for syntaksfarvning i en editor ofte styret af et XML-dokument, som med lidt omhu kan ændres.
jamen så prøver jeg da notepad++ og ser om ikke vi kan blive dus. Jeg vil dog ikke forsøge mig udi at ændre XML koden til at styre farverne med lige med det samme :-) Tak for hjælpen.
Efter at have installeret det og givet det en lille testkørsel er jeg godt tilfreds. En af fordelene ved notepad++ (kontra notepad) er at man skifter imellem de forskellige scripts via faneblade i stedet for vinduer, dette synes jeg er meget bedre. Dog skal jeg så lige holde tungen lige i munden, for når jeg lukker programmet og åbner det igen, så er mine scripts der stadig. Dette skulle ikke være noget problem bortset fra at jeg har opbygget min webside i underbiblioteker for hver server, med de samme filnavne hehe, så jeg skal lige holde tungen lige i munden of huske hvilken index.php der hører hvortil :-P mindre detalje som kan undgåes næste gang jeg bygger en webside op.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.