28. november 2007 - 01:22Der er
8 kommentarer og 1 løsning
Max km tal ved sidste tankning
Jeg finder den største km på den sidste nye dato på den bestemte bus. Og det kan jeg gøre sådan her:
$kmSQL = " SELECT vs.Km FROM vaerksted.vspeedo AS vs WHERE vs.ts = (SELECT MAX(vss.ts) FROM vaerksted.vspeedo vss WHERE vss.vognnr='$s[bus]' AND vss.Tekst='Hjemmetank') AND vs.vognnr='$s[bus]'"; $res = mysql_query($kmSQL) or die (mysql_error()); while ($db = mysql_fetch_array($res)) { $km = $db[Km]; }
Problemet er bare at den løber igennem 50 busser. Og det går alt for langsomt. Kan man gøre det på en smartere og hurtigere måde?
Nu er det første gang jeg har prøvet det med index. Og ved ikke om jeg har lavet det rigtigt. Jeg har lavet normal index på vognnr og ts. Det tager ca 4-5 sek. Før jeg lavede index tog det 50-60 sek så måtte sætte tiden op for at se hvor længe det vil ta.
Alternativet virkede desværre ikke. Så får jeg samme km på alle busserne.
Ved godt den sidste retunere 1 da der er limit på. Men den køre jo igennem 50 busser. Men her her er mine sql sætninger:
$eftersyn=" SELECT cv.BUS, Max(vke.kmtaeller) as kmtaeller, vke.kmtjek as kmtjek, Max(DATE_FORMAT(vke.dato,'%d-%m-%Y')) AS dato FROM c2.vognlob AS cv Left Outer Join vaerksted.kmeftersyn AS vke ON cv.BUS = vke.busnr WHERE cv.PLANPERIODE = '19' GROUP BY cv.BUS ORDER BY vke.kmtaeller ";
$resultat = mysql_query($eftersyn); $eftersyn = array(); while ($db = mysql_fetch_array($resultat)) { $kmSQL = " SELECT vs.Km FROM vaerksted.vspeedo AS vs WHERE vs.ts = (SELECT MAX(vss.ts) FROM vaerksted.vspeedo vss WHERE vss.vognnr='$db[BUS]' AND vss.Tekst='Hjemmetank') AND vs.vognnr='$db[BUS]' LIMIT 1"; $ress = mysql_query($kmSQL) or die (mysql_error()); while ($dbs = mysql_fetch_array($ress)) { $vkm = $dbs[Km]; } }
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.