Avatar billede okf2000 Praktikant
15. juni 2016 - 12:33 Der er 6 kommentarer

Hjælp til at opimertet denne code

Hej.
Jeg har et lille problem jeg har en søge funktion som henter en masse liner fra MySQL og det viker ok, problemmet er jeg har også har brug for at regne lidt på nogen infomation i en anden table. og det er her problemet. for være line den hente i den føste table skal den til at lave 3 sum querys fra table nummer 2.

men dette gøre søgingen maget sløv, så jeg håber i kan hjælpe mig lidt ud

Har der php for den del som hente fra table 2.

          $time = '1';
          $ans = $row['ans'];
          $qry = mysql_query(" SELECT SUM(timer) AS total FROM proservice_rapport WHERE service_raport = '$id' AND timer != '-'");
          $qry2 = mysql_query(" SELECT SUM(timer50) AS total2 FROM proservice_rapport WHERE service_raport = '$id'");
          $qry3 = mysql_query(" SELECT SUM(timer100) AS total3 FROM proservice_rapport WHERE service_raport = '$id'");
            $row2 = mysql_fetch_assoc($qry);
            $row3 = mysql_fetch_assoc($qry2);
            $row4 = mysql_fetch_assoc($qry3);
          $total = $row2['total'];
          $total2 = $row3['total2'];
          $total3 = $row4['total3'];
          $total4 = $total + $total2 + $total3;
            $total4 = str_replace(array("."),array(","),$total4);
                    $total1 = str_replace(array(","),array("."),$total1);
                        $total1 = $total * $time ;
            $total21 = str_replace(array(","),array("."),$total21);
                        $total21 = $total2 * $time ;
                        $total21 = $total21 * 1.50 ;
            $total31 = str_replace(array(","),array("."),$total31);
                        $total31 = $total3 * $time ;
                        $total31 = $total31 * 2 ;

                        $penge = $total1 + $total21 + $total31;

venlig Hilsen
Otto Algreen
Avatar billede Slettet bruger
15. juni 2016 - 13:02 #1
To ting:

1) Har du indeks på kolonnen service_raport? (Det bør du have.)

2) Overvej at sætte $qry2 og $qry3 sammen til en:
" SELECT SUM(timer50) AS total2, SUM(timer100) AS total3 FROM proservice_rapport WHERE service_raport = '$id'"
Avatar billede Slettet bruger
15. juni 2016 - 13:05 #2
Og, hvis du kan få 'timer'-feltet til kun at indeholde tal og ikke et '-' (så '-' gemmes som et nul i tabellen), så kan du sætte den med i samme opslag som de andre.
Avatar billede arne_v Ekspert
15. juni 2016 - 14:00 #3
SELECT SUM(IF(timer!='-',timer,0)) AS total,SUM(timer50) AS total50,SUM(timer100) AS total100
FROM proservice_rapport
WHERE service_raport = '$id'
Avatar billede arne_v Ekspert
15. juni 2016 - 14:01 #4
Og saa boer du naturligvis skifte til mysqli eller PDO og bruge prepared statement.
Avatar billede okf2000 Praktikant
15. juni 2016 - 14:12 #5
Hej. index havde jeg aldrig arbjede med før og det må siges at havde hjulpet sammen med at jeg slå timer 2 og 3 sammen.

jeg havde ikke mulighed for at ændre på - i timer, da den bruges som mærket om en line skal med ud på en rapport.

jeg vil nu lave index på alle de andre tabler, som forespørges på tit, det vil helt sikket hjælpe.
Avatar billede Slettet bruger
15. juni 2016 - 14:20 #6
Det er normalt en god ide at have indeks på kolonner, man søger meget på.

Der er dog enkelte situationer, f.eks. hvis man tilføjer en hel masse rækker i tabellen på en gang (restore fra backup f.eks.), hvor det kan være en fordel ikke at have indeks på imens, og så først sætte dem på når man har indsat data.

Derudover vil jeg lige foreslå at gøre, som Arne siger.
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

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