04. april 2005 - 16:19Der er
10 kommentarer og 1 løsning
forkert værdi indsat ved UPDATE
Jeg forstår det ikke. Jeg har en sql der ikke indsætter den rigtige værdi i etfelt i mysql i et script. Istedet indsætter den en værdi jeg ikke aner hvor kommer fra. Jeg har echo'et den fulde sql-streng og den ser rigtig nok ud:
UPDATE seti SET curcredit = 19133.17 WHERE memberid = 1
Men af én eller anden årsag bliver den ved med at indsætte værdien 10027
Det mest underlige er, at lidt senere i scriptet har jeg præcis den samme kode, hvor det bare er en anden tabel der skal indsættes en værdi i, og der gør den det rigtigt...
et udsnit
$sql = "SELECT * FROM members WHERE (id > 0) AND (id < 16)";
$status=mysql_query("$sql") or die (mysql_error());
while ($row = mysql_fetch_array($status)){ $boinctotal=0.00; $memberid=$row["id"]; echo("$memberid<br>"); $totalcredit=0.00; //SETI
$sql2 = "SELECT * FROM seti WHERE memberid = $memberid";
$status2=mysql_query("$sql2") or die (mysql_error());
while ($row2 = mysql_fetch_array($status2)){ $id=$row2["accountnr"]; $curcredit=$row2["curcredit"]; echo("$id x=$x project=$projects[$x]<br>credit $curcredit<br>");
break; case 'parse_show_user_xml': $totalcredit=$stats_array['tot_credit'];
$avaragecredit=$stats_array['avg_credit'];
break; case 'parse_website': $teamname=$stats_array['teamname'];
$totalcredit=$stats_array['tot_credit'];
$avaragecredit=$stats_array['avg_credit'];
break;
} } if (!$stats_array['teamname']=""){ if($memberid==1){ $allteamtotal+=$teamtotalcredit; $allteamavarage+=$teamavaragecredit; } $boinctotal+=$totalcredit; if($curcredit<$totalcredit){ $sql5 = "UPDATE seti SET curcredit = $totalcredit WHERE memberid = $memberid"; 'HER GÅR DET GALT mysql_query("$sql5"); } echo("teamname $teamname<br>totalcredit $totalcredit<br>avarage credit $avaragecredit<br>teamtotal $teamtotalcredit<br>teamavarage $teamavaragecredit<br>all teamtotal $allteamtotal<br>all teamavarage $allteamavarage<br>total credit boinc $boinctotal<br>curcredir $curcredit<br>$sql5<br><br>"); }
if($memberid==1){ $sql3 = "SELECT * FROM esea WHERE id = 1";
$status3=mysql_query("$sql3") or die (mysql_error());
while ($row3 = mysql_fetch_array($status3)){ if($teamtotalcredit>$row3["total"]){ $sql4 = "UPDATE esea SET total = $teamtotalcredit, avarage = $teamavaragecredit WHERE id = 1"; mysql_query("$sql4"); } } } }
$teamtotalcredit=0; $totalcredit=0.00; $x+=1;
//PREDICTOR
$sql2 = "SELECT * FROM predictor WHERE memberid =$memberid";
$status2=mysql_query("$sql2") or die (mysql_error());
while ($row2 = mysql_fetch_array($status2)){ $id=$row2["accountnr"]; $curcredit=$row2["curcredit"]; echo("$id x=$x project=$projects[$x]<br>credit $curcredit<br>");
break; case 'parse_show_user_xml': $totalcredit=$stats_array['tot_credit'];
$avaragecredit=$stats_array['avg_credit'];
break; case 'parse_website': $teamname=$stats_array['teamname'];
$totalcredit=$stats_array['tot_credit'];
$avaragecredit=$stats_array['avg_credit'];
break;
} } if (!$stats_array['teamname']=""){ if($memberid==1){ $allteamtotal+=$teamtotalcredit; $allteamavarage+=$teamavaragecredit; } $boinctotal+=$totalcredit; echo("teamname $teamname<br>totalcredit $totalcredit<br>avarage credit $avaragecredit<br>teamtotal $teamtotalcredit<br>teamavarage $teamavaragecredit<br>all teamtotal $allteamtotal<br>all teamavarage $allteamavarage<br>total credit boinc $boinctotal<br><br>"); } if($curcredit<$totalcredit){ $sql2 = "UPDATE predictor SET curcredit = $totalcredit WHERE memberid = $memberid"; 'HER GÅR DET GODT mysql_query("$sql2"); }
if($memberid==1){ $sql3 = "SELECT * FROM esea WHERE id = 2";
$status3=mysql_query("$sql3") or die (mysql_error());
while ($row3 = mysql_fetch_array($status3)){ if($teamtotalcredit>$row3["total"]){ $sql4 = "UPDATE esea SET total = $teamtotalcredit, avarage = $teamavaragecredit WHERE id = 2"; mysql_query("$sql4"); } } }
}
$teamtotalcredit=0; $x+=1;
skal lige sige at jeg har flyttet lidt på det for at få sql'en udskrevet, men samme fejl
hov - opdager at fejlen sandsynligvis ligger i den ydre løkke..
hvor memberid egentlig skulle være 3 er den 1 - hvor den egentlig skulle være 18 er den 5 - så der sker nogle overskrivninger der ikke burde finde sted.
Tager lige resten over smider ud så jeg kan få overblik over den ydre løkke
1 146735 x=0 project=seti credit 0 setiteamname ESEA (Earth Space Exploration Agency) totalcredit 19133.17 avarage credit 48.48 teamtotal 19012.10 teamavarage 409.39 all teamtotal 19012.1 all teamavarage 409.39 total credit boinc 19133.17 curcredir 0 UPDATE seti SET curcredit = 19133.17 WHERE memberid = 1
2 2839011 x=0 project=seti credit 0 setiteamname None totalcredit 0.00 avarage credit 0.00 teamtotal - teamavarage - all teamtotal 19012.1 all teamavarage 409.39 total credit boinc 0 curcredir 0 UPDATE seti SET curcredit = 19133.17 WHERE memberid = 1
3 7833542 x=0 project=seti credit 0 setiteamname None totalcredit 1683.17 avarage credit 53.98 teamtotal - teamavarage - all teamtotal 19012.1 all teamavarage 409.39 total credit boinc 1683.17 curcredir 0 UPDATE seti SET curcredit = 1683.17 WHERE memberid = 3
jeg er ikke helt med på hvorfor SQL'en kommer med i 2'eren - og hvorfor $totalcredit og $memberid har de værdier på det tidspunkt - jeg mener, $memberid udskrives jo i første omgang korrekt som "2", men bliver til "1" når SQL'en udskrives. Og $totalcredit gik jeg ud fra blev til 0..
Under alle omstændigheder betyder det at der vel foregå en masse unødvendige opdateringer af samme felt i samme række - og det er sandsynligvis dér der går galt når jeg kører hele molevitten..
åhh jeg kvaj.. glemte da helt at $sql5 jo ikke bliver opdateret i 2'eren, og heller ikke fravælges i udskriften, så selvfølgelig har de de værdier *klasker mig selv på panden* :D
Jeg fandt brøleren - naturligvis et andet sted end der hvor jeg leder efter den *lol* typisk..
Det var simpelthen et sted hvor jeg opdaterer den forkerte tabel. Så er det jo klart det egentlig ser ud til at virke, men får de forkerte værdier alligevel.
De 10027 kommer fra dette sted, men skulle egentlig være 10027.05 - det er så en anden sag. Øvrige rækker i den tabel modtager fint float. Nå, men jeg fandt fejlen ;)
jah, sådan kan det gå - ku' være jeg skulle indsætte en nulstilling af sql5 et sted *lol*
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.