zu viele querys

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • zu viele querys

    Hi,

    ja ich schon wieder, ich versuche gerade eine vernünftige select Funktion für Kategorien hinzukriegen, aber irgentwie steigen die Querys ins unermesliche, was jain einer grossen Datenbank nicht mehr schön ist. Kann mir da malk jemand einen tip geben wie ich das Optimieren kann. Hier mal die Funktion;
    PHP-Code:
    function getlinkscat() {
        global 
    $p,$connect,$admin_txt;
        echo 
    "<select size='1' name='getcat'><option value='1'>$admin_txt[157]</option>";
        
    $getcat $connect->query("SELECT id FROM axp".$p."_linkscats ORDER BY subcat");
        
    $i=0;
        while (
    $listcat $connect->my_array($getcat)) {
                
    $cat="";
                
    $catid=$listcat[id];
            while ( 
    $catid != 0) {
                       
    $subcat  $connect->query_first("Select subcat,cat,id,topcat FROM axp".$p."_linkscats WHERE topcat='$catid' && enable='yes'");
                
    $catid =$subcat[subcat];
                
    $cat "/$subcat[cat]".$cat;
                }
            
    $cat"Index".$cat;;
            
    $catarray[$i][0]=$cat;
            
    $catarray[$i][1]=$listcat[id];
            
    $i++;
            }
           function 
    sortCatArray($a$b) {
             return 
    strcmp($a[0], $b[0]);
            }
            
    usort($catarray'sortCatArray');
            foreach(
    $catarray as $phat) {
            if (
    $cats[id] == $phat[1]) {
            echo 
    "<option selected value='$phat[1]'>$phat[0]</option>";
        } else {
            echo 
    "<option value='$phat[1]'>$phat[0]</option>";
            }
        }
        echo 
    "    </select>";

    also Dies funktion macht nichts anderes als die Kategorien in der art von:

    Index/Links
    Index/Links/Sublinks auszugeben. Wie gesagt das Funktioniert auch nur bekomme ich es nicht hin weniger Querys zu erzeugen.

    mfg

  • #2
    wieviele querys will der denn zurückgeben? vielleicht überschreitest du ja die maximale requestrate. die müsstest du dann erhöhen (nicht zu empfehlen)

    wieso verwendest du den && operator statt AND in deinem query?

    verwendest du die phplib?

    Kommentar


    • #3
      bei 62 Kathegorie einträge erzeugt der Code ca 240 Quary´s, das mit der request rate ist nicht das problemm, das geht schon recht zügig mit dem Aufbau. denoch finde ich die Querys etwas viel. Das problem ist lediglich das ich noch mehr Kategorien, bei meiner alten Datenbank waren es ca 300 , da kann man sich ja ausrechnen wo die Query liegen werden.

      Nein ich benutze keine PHPlib.
      Zuletzt geändert von ; 12.08.2002, 10:02.

      Kommentar


      • #4
        Einige Querys ca.100, konnte ich die abfrage noch runter schrauben, in dem ich die datenbank abfrage geändert habe, anstelle von free_result die in der query_first abfrage vorkommt benutze ich nun volgende abfrage in der While schleife:
        PHP-Code:
        while ( $catid != 0) {
                           
        $query  $connect->query("Select subcat,cat,id,topcat FROM axp".$p."_linkscats WHERE topcat='$catid' AND enable='yes'");
                    
        $subcat $connect->my_array($query); 
        Damit bin ich nun bei 150 querys, ist da vieleicht noch mehr drin.

        Kommentar


        • #5
          dann lege dein query ausserhalb der while-schleife an und unterscheide mit php selber ...

          so in der art:
          PHP-Code:
          $query  $connect->query("Select subcat,cat,id,topcat FROM axp".$p."_linkscats;");

          while ( 
          $catid != 0) {
                       
          $subcat $connect->my_array($query);
                      if(
          $subcat["topcat"]==$catid && $subcat["enable"]=="yes")
                      
          // do something 
          kann u.u. performanter sein, als 100 queries


          beebob

          Kommentar


          • #6
            Hi!

            @ Citycobra:

            Deine DB-Struktur ist schlecht gewählt.

            Wenn Du die Enität von P als Feld eingefügt hättest, müsstest Du Dich nur mit einer Tabelle rumschlagen und die Performance an der Stelle wäre, um ein 50faches größer !

            Datenbankstrukturen immer sorgfältig planen!

            cu

            Blaster
            Yuppi, endlich Elite ...

            Kommentar


            • #7
              yo, blaster. niemand hat was gegen einen zünftigen foreign key

              Kommentar


              • #8
                Hi

                P ist in diesem fall immer 1 und wird in der connect.php festgelegt, ich wollte mir die option offen lassen mehrere scripte zu instalieren.

                Kommentar


                • #9
                  also steht der fix in deiner config? gut.

                  hast du das mit dem query ausserhalb der schleife probiert?

                  Kommentar


                  • #10
                    Ja ich bin noch dabei, bekomme aber kein Resultat, die Schleife hängt sich immer auf.So das ich immer eine lehre selectbox bekomme und der rest der seite nicht mehr aufgebaut wird

                    Kommentar


                    • #11
                      dann zeisch ens däm code ...

                      Kommentar


                      • #12
                        Hier ist noch mal der Funktionierende Code mit dem 150 Querys
                        PHP-Code:
                         function getlinkscat() {
                            global 
                        $p,$connect,$admin_txt;
                            echo 
                        "<select size='1' name='getcat'><option value='1'>$admin_txt[157]</option>";
                            
                        $getcat $connect->query("SELECT id FROM axp".$p."_linkscats ORDER BY subcat");
                            
                        $i=0;
                            while (
                        $listcat $connect->my_array($getcat)) {
                                    
                        $cat="";
                                    
                        $catid=$listcat[id];
                                while ( 
                        $catid != 0) {
                                           
                        $query  $connect->query("Select subcat,cat,id FROM axp".$p."_linkscats WHERE topcat='$catid' && enable='yes'");
                                    
                        $subcat $connect->my_array($query);
                                    
                        $catid =$subcat[subcat];
                                    
                        $cat "/$subcat[cat]".$cat;
                                    }
                                
                        $cat"Index".$cat;;
                                
                        $catarray[$i][0]=$cat;
                                
                        $catarray[$i][1]=$listcat[id];
                                
                        $i++;
                                }
                            function 
                        sortCatArray($a$b) {
                                 return 
                        strcmp($a[0], $b[0]);
                                }
                                
                        usort($catarray'sortCatArray');
                                foreach(
                        $catarray as $phat) {
                                if (
                        $cats[id] == $phat[1]) {
                                echo 
                        "<option selected value='$phat[1]'>$phat[0]</option>";
                            } else {
                                echo 
                        "<option value='$phat[1]'>$phat[0]</option>";
                                }
                            }
                            echo 
                        "    </select>";

                        Kommentar


                        • #13
                          würde dieser query nicht vollkommen ausreichen? du bräuchtest dann wenn überhaupt nur eine while-schleife. oder raffe ich den kontext nicht?

                          PHP-Code:
                          $query="SELECT * FROM axp".$p."_linkscats WHERE id=$catid AND topcat='$catid' AND enable='yes' ORDER BY subcat"

                          Kommentar


                          • #14
                            ach ja hier kannst Du sehen was das script macht.

                            http://www.webmaster-xxl.org/index.php?action=sel

                            Kommentar


                            • #15
                              nein würde nicht reichen, weil das für ne link datenbak ist und ich so jede Kategorie einzeln angezeigt bekomme und nicht die dazu gehörige Hauptkategorie, bei gleichen Kategorien würde es unübersichtlich

                              Kommentar

                              Lädt...
                              X