Avatar billede JC73 Nybegynder
28. december 2011 - 10:35 Der 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?
Avatar billede erikjacobsen Ekspert
28. december 2011 - 11:02 #1
Det er ikke den mest elegante måde at gøre det på, men det bør selvfølgelig virke!

Mon ikke det er din brug a NumArray i stedet for $NumArray, der gør forskellen?
28. december 2011 - 11:03 #2
Hvis du kun vil have en linie for hver server med den samlede score per server skal din forespørgsel nok være sådan noget som:

SELECT Server, SUM(Score) FROM CTF GROUP BY Server
28. december 2011 - 11:06 #3
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.
Avatar billede erikjacobsen Ekspert
28. december 2011 - 11:08 #4
I dette tilfælde så:

  SELECT Server, SUM(Score+Seconds) FROM CTF GROUP BY Server
Avatar billede JC73 Nybegynder
28. december 2011 - 13:03 #5
MANGE TAK!!

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>
28. december 2011 - 13:13 #6
Svar fra mig.
Avatar billede erikjacobsen Ekspert
28. december 2011 - 13:46 #7
Ingen point til mig, tak.

En editor, der kan farvekode PHP-kode, ville vise dig fejlen med det samme. Men selvfølgelig skal man (oftest) lade databasen gøre arbejdet.
Avatar billede JC73 Nybegynder
28. december 2011 - 14:17 #8
#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?
Avatar billede erikjacobsen Ekspert
28. december 2011 - 14:21 #9
Notepad++ er vist godt. Men jeg bruger selv http://editplus.com/ der koster lidt, men kan prøves gratis.
Avatar billede olebole Juniormester
28. december 2011 - 16:15 #10
<ole>

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.

/mvh
</bole>
Avatar billede JC73 Nybegynder
29. december 2011 - 12:12 #11
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.
29. december 2011 - 12:27 #12
Jeg bruger selv notepad++ og er glad for det.
Avatar billede JC73 Nybegynder
29. december 2011 - 13:14 #13
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester