Avatar billede shjorth Nybegynder
12. juni 2010 - 20:46 Der er 13 kommentarer og
1 løsning

Multidimensional arrays ?

Hejsa.

Jeg har en løkke der ser således ud:

while($row...) {

$id = $row['id'];
$nytTal = rand(1,15);
$tal = $tal+$nytTal
mysql_query("UPDATE... SET `tal`=`tal`+".$tal." WHERE id = ".$id."....
}

Men for at undgå at skulle lave en "UPDATE" inde i løkken, så ville jeg gøre det uden for.
Hvilket så betyder (er mit gæt) at jeg skal have to arrays. 1 med "ID", og 1 med "TAL".

Spørgsmålet er så hvordan jeg gør det, og endnu bedre hvordan jeg ændrer værdien af "TAL" inde i løkken.

Håber det var til at forstå.

Takker mange gange, og god weekend
Avatar billede repox Seniormester
12. juni 2010 - 20:51 #1
Hvad skulle formålet være med at tage den ud af løkken?
Avatar billede shjorth Nybegynder
12. juni 2010 - 20:58 #2
At undgå en UPDATE for hver eneste gang løkken køres, og dermed aflaste databasen lidt :)
Avatar billede repox Seniormester
12. juni 2010 - 21:00 #3
Hvad er det helt præcist du gerne vil opnå?
Altså, hvis vi ved hvad resultatet skal være, fremfor midlet, kan det være vi kan komme med et godt forslag.
Avatar billede shjorth Nybegynder
12. juni 2010 - 21:02 #4
Det er lidt tricky at forklare.. Men jeg skal opdatere i en tabel med de ID'er der ligger i det formodede array. De skal således opdateres med de værdier som ligger i array2.

Det er udelukkende for at undgå at have en mysql_query("UPDATE inde i løkken.. Da der er mange med samme id der skal opdateres
Avatar billede repox Seniormester
12. juni 2010 - 21:04 #5
Er det bare et tilfældigt tal, de ID'er skal opdateres med?
Avatar billede shjorth Nybegynder
12. juni 2010 - 21:06 #6
Nej det er summen af "$tal" , altså til det korrekte ID
Avatar billede repox Seniormester
12. juni 2010 - 21:13 #7
Problemet er jo netop at du så kun kan opdatere en række ad gangen, når tallet er et bestemt tal, der skal passe til et bestemt ID.
Så din egen løsning er nok det bedste bud der kan komme. Alternativt kan du spørge i kategorien for MySQL og se om nogen kan komme på et bud for en SQL streng der kan løse opgaven, men jeg tvivler.
Avatar billede shjorth Nybegynder
12. juni 2010 - 21:17 #8
Du mistforstår hvad jeg det er jeg vil.

Når jeg løber løkken igennem laver jeg en masse udregninger, her iblandt "tal" som er "slid" på en bane.

Det slid er f.eks 0.7. Løkken forstætter så og finder nyt slid f.eks 1.0. Summen af de slid (1.7) passer så på et bestemt ID i min UPDATE tabel.. Så istedet for at

UPDATE tabel SET `tal`=`tal`+'0.7' WHERE id = x
UPDATE tabel SET `tal`=`tal`+'1.0' WHERE id = x

Så kan det gøres med en enkelt query, men jeg kender ikke tallet før løkken er helt færdig.

Det er jo sådan set simpelt nok. Den tricky del kommer så da der også er forskellige ID.. Der kan f.eks være 12 rækker som hører til ID 2 med et samlet slid på 50, og så kan der være 2 rækker til ID 3 med et samlet slid på 2.
Avatar billede xicrow Nybegynder
12. juni 2010 - 21:33 #9
Efter den lidt nærmere forklaring, vil jeg mene en løsning kunne se således ud:

<?php
// Array til data (nøglen bliver id'et, værdien bliver tallet
$data = array();

// Loop gennem resultater fra databaseb
while($row = mysql_fetch_assoc($query)){
    // Hent id
    $id = $row['id'];
   
    // Generer tal
    $tal = rand(1,15);
   
    // Tjek om id allerede findes i arrayet
    if (isset($data[$id])){
        // Læg til eksisterende værdi
        $data[$id]+= $tal;
    }
    else{
        // Opret id, og sæt tal til værdi
        $data[$id] = $tal;
    }
}

// Loop gennem data
foreach ($data as $id => $tal){
    // Opdater række i databasen
    mysql_query("UPDATE ... SET `tal` = `tal`+".$tal." WHERE id = ".$id."");
}
?>


/xicrow
Avatar billede repox Seniormester
12. juni 2010 - 21:34 #10
Og for at sikre mig, jeg er helt med, så er det reelle problem at dit 'slid' på banen, kan opstå flere gange for et ID, og din problematik er således at du har flere UPDATES pr ID og vil gerne skære det ned til en enkelt UPDATE pr ID?
Avatar billede shjorth Nybegynder
12. juni 2010 - 21:35 #11
Ja LIGE præcis :D Beklager den ringe forklaring ;)
Avatar billede shjorth Nybegynder
12. juni 2010 - 21:36 #12
#9 Det var præcis det jeg ledte efter.. Takker mange gange :)

og igen, beklager den dårlige forklaring.. Var en smule ud over min kunnen ;)
Avatar billede xicrow Nybegynder
12. juni 2010 - 21:39 #13
#12
Helt i orden, vi kan alle have svært ved at fortælle hvad det er vi gerne vil, så alle kan forstå det :D

Men jeg syntes nu ellers repox skulle have haft lidt point, for at lokke den egentlige problemstilling ud af dig :P

/xicrow
Avatar billede shjorth Nybegynder
12. juni 2010 - 21:44 #14
Det kan du sådan set godt have ret i.. Det ville være på sin plads:
http://www.eksperten.dk/spm/911981
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