12. juni 2010 - 20:46Der 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.
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.
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
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.
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.
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.""); } ?>
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?
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.