big sql

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

  • big sql

    guten morgen !!!
    ich habe einen wochenkalender, dieser ist von 08.00 bis 18 uhr unterteilt. es können für jeden tag und jede halbe stunde einträge in der db (mysql) emacht werden. diese habe ich über eine id 14.05.2004.60 eindeutig in der db abgelegt.
    die letzte 60 zeigt an das der eintrag für 08:30 bestimmt ist. hier zähle ich immer 30 pro eintrag hinzu.
    nun habe ich eine abfrage:
    suche zu jedem 30 eintrag an jedem tag einen eintrag in der db. die abfrage dauert zwischen 5 und 10 sekunden.
    wie bringe ich es schneller hin?

    ###########################################
    //schleife wird für das ende der ausgabe tab. und zeitrechnung genutzt
    for($t=0; $t<20; $t++) {
    $caltime = "30"; // zur berechnung der zeit in where

    for($l=0; $l<=6; $l++){


    // an den wochentag bsp. 10.10.2004 wird der timestempel bsp 30, 60 ect. angehängt
    $where =($wochentag[$l].".".$caltime*$t);

    $sql="SELECT * FROM $system[TB_DATEN] WHERE id='$where'";
    $sql=mysql($system[DB], $sql);
    @$nachricht=mysql_result($sql,0,1); //erstellt Nachricht
    if($nachricht!="") //wenn Termin vorhanden
    echo "";


    if($x == $kkkk) {
    if($nachricht!="") {
    echo "<td bgcolor=\"#FFFFFF\"><a href=\"javascriptpen_nachricht($j,".$nachricht.")\" class=\"anzeige\">";
    echo "<a href=\"$nachrichten\">".$nachricht;
    echo "</a></td>";
    }
    //else if($nachricht!="" && $feiertag==$wochentag[$l]) // wenn Feiertag dann
    else if (in_array("$wochentag[$l]", $myfeiertag))
    {
    echo "<td bgcolor=\"#FFCCCC\"><a href=\"javascriptpen_nachricht($j,".$nachricht.")\" class=\"anzeige\">";
    echo "<a href=\"$nachriichten\">".$nachricht;
    echo "</a></td>";
    }else if ($feiertag==$wochentag[$l]){
    // }else if ($feiertag[$datum[monatsNamen][$monat]][$yyyy]==$wochentag[$l]){
    echo "<td bgcolor=\"#FFCCCC\">&nbsp;</td>";
    }else{
    echo "<td bgcolor=\"#CCCCFF\">&nbsp;</td>";
    }

    // zeit angeben für den linken tabellenrand
    $time = '08:30';
    list($h, $m) = split(':', $time);
    $d = mktime($h, $m, 0, 1, 1, 1970);
    $add = 30;
    $zeitteiler = date('H:i', $d + 60 * ($add* $t));


    if($l==6 && $t<19) echo "</tr><tr><td><font color=\"#FFFFFF\"><b>$zeitteiler</b></font></td>";
    if($l==6 && $t>19) echo "</tr>";


    }
    ect..................................
    ###########################################

    bin anfänger und für jeden tipp dankbar

  • #2
    Wie sind deine Indizes gesetzt?
    Schon EXPLAIN ausprobiert?

    Kommentar


    • #3
      hi

      ###Wie sind deine Indizes gesetzt?

      ich habe derzeit nur eine tabelle.

      ###Schon EXPLAIN ausprobiert?
      nein, da muss ich mich erst mal schlau machen was es mit EXPLAIN auf sich hat.


      Danke

      Kommentar


      • #4
        Hallo! Du schickst 140 SQL's an den Server!

        Kommentar


        • #5
          ja, dass habe ich befürchtet.

          hast du einen rat wie ich anders lösen sollte?

          danke

          Kommentar


          • #6
            Den Bereich im SQL so wählen, dass genau die Zeilen
            drin sind die Du brauchst (WHERE auf den ganzen Zeitraum).

            Dann die Abfrage 1x ausführen und mit der Schleife das Ergebnis auswerten.

            Kommentar


            • #7
              noch nicht so ganz kapiert

              hi,
              leider kapiere ich es immer noch nicht so ganz. meine schleife:

              PHP-Code:
              mysql_connect"$dbhost""$dbuser""$dbpass")  or  die( "Unable  to  connect to SQL  server");
              @
              mysql_select_db"$dbname")  or  die( "Unable  to  select  database");

                        
              $result mysql("db100588358""SELECT id, daten FROM KALENDER_DATEN");
                        while(
              $row  =  mysql_fetch_row($result))  {

               for(
              $l=0$l<7$l++){
              //schleife wird für das ende der ausgabe tab. und zeitrechnung genutzt
              // for($t=0; $t<20; $t++) {
               
              $caltime "30";      // zur berechnung der zeit in where


              // an den wochentag bsp. 10.10.2004 wird der timestempel bsp 30, 60 ect. angehängt
              $where =($wochentag[$l].".".$caltime);
               
              // tag++  und zeit  also 10.05.2004.00
                 //  echo $where."wh<br>";
                    
              if($x == $kkkk) {
                             if(
              $where==$row[0]) {
                             echo 
              "<td bgcolor=\"#FFFFFF\"><a href=\"javascript:open_nachricht($j,".$row[1].")\" class=\"anzeige\">";
                             echo 
              "<a href=\"$nachrichten\">".$row[1];
                             echo 
              "</a></td>";
                             }
                             
              //else if($nachricht!="" && $feiertag==$wochentag[$l]) // wenn Feiertag dann
                             
              else if (in_array("$wochentag[$l]"$myfeiertag))
                             {
                             echo 
              "<td bgcolor=\"#FFCCCC\"><a href=\"javascript:open_nachricht($j,".$row[1].")\" class=\"anzeige\">";
                             echo 
              "<a href=\"$nachriichten\">".$row[1];
                             echo 
              "</a></td>";
                             }else if (
              $feiertag==$wochentag[$l]){
                        
              //     }else if ($feiertag[$datum[monatsNamen][$monat]][$yyyy]==$wochentag[$l]){
                             
              echo "<td bgcolor=\"#FFCCCC\">&nbsp;</td>";
                             }else{
                             echo 
              "<td bgcolor=\"#CCCCFF\">&nbsp;</td>";
                             }
                  
              //   if ($l==3) break;
                  // zeit angeben für den linken tabellenrand
                  
              $time '08:30';
                  list(
              $h$m) = split(':'$time);
                  
              $d mktime($h$m0111970);
                  
              $add 30;
                  
              $zeitteiler date('H:i'$d 60 * ($add$t));


                    if(
              $l==6) echo "</tr><tr>";
                
              //    if($l==6) echo "</tr><tr><td><font color=\"#FFFFFF\"><b>$zeitteiler</b></font></td>";
                //    if($l==6 && $t>19) echo "</tr>";


               
              //ende if
              // ende der for schleife 


              nun habe ich eine schleife in den datenabnk results. ist der zweite
              datensatz nicht passend wird leer zurückgegeben. von daher passt meine
              formatirung in meiner kalendertabelle nicht mehr.

              jemand einen heißen tipp?
              danke frank
              Zuletzt geändert von frank_muc; 15.05.2004, 15:18.

              Kommentar


              • #8
                frage zu array

                nunhabe ich mein result in ein array geschrieben. kann den inhalt aber nicht außerhalb der while schleife zur ansicht bringen.

                -----------------------------------------------------------
                while($daten = mysql_fetch_array($result, MYSQL_ASSOC)) {
                // echo $daten['id']."00000<br>";
                // echo $daten['daten']."11111<br>";
                }//end while

                for($l=0; $l<7;$l++){
                if($x == $kkkk) {
                $caltime = "30";
                $where =($wochentag[$l].".".$caltime);
                echo $where."fffffffffffffff".$daten['id'];
                echo $daten['daten']."11111<br>";
                echo $daten['id']."00000<br>";
                if(in_array("$where", $daten['id'])) { //foreach($row as $where) { //
                echo "<td bgcolor=\"#FFFFFF\"><a href=\"javascriptpen_nachricht($j,".$daten['daten'].")\" class=\"anzeige\">";
                echo "<a href=\"$row[0]\">".$daten['daten'];

                -------------------------------------------------------------------------------------
                hat jemand einen tipp fü nen anfänger?

                danke

                Kommentar


                • #9
                  Bitte Code in den Forum-PHP-Tags reinpacken (mit [ php] einleiten und [/ php] (ohne Leerzeichen) abschliessen.

                  du hast in While kein Array verwendet, daher ..., mach mal so
                  PHP-Code:
                   while($daten[] = mysql_fetch_array($resultMYSQL_ASSOC)); 

                  Kommentar


                  • #10
                    danke für die antwort. leider funktioniert es so auch nicht. ich schicke den code nochmals wie von dir gewünscht.
                    hoffe es klappt.

                    PHP-Code:
                    $result mysql("db100588358""SELECT id, daten FROM KALENDER_DATEN");
                              
                    //MYSQL_ASSOC erstellt assoziatives Array, spalte direkt ansprechbar
                              
                    while($daten[] = mysql_fetch_array($resultMYSQL_ASSOC))  {
                               echo 
                    $daten['id']."00000<br>";
                               echo 
                    $daten['daten']."11111<br>";
                              }
                    //end while

                               
                    for($l=0$l<7;$l++){

                                          if(
                    $x == $kkkk) {
                                          
                    $caltime "30";
                                          
                    $where =($wochentag[$l].".".$caltime);
                                          echo 
                    $where."fffffffffffffff".$daten['id'];
                                          echo 
                    $daten['daten']."11<br>";
                                          echo 
                    $daten['id']."00<br>";
                                   if(
                    in_array("$where"$daten['id'])) { //foreach($row as $where) { //
                                   
                    echo "<td bgcolor=\"#FFFFFF\"><a href=\"javascript:open_nachricht($j,".$daten['daten'].")\" class=\"anzeige\">";
                                   echo 
                    "<a href=\"$row[0]\">".$daten['daten'];
                                   echo 
                    "</a>".$daten['daten']."</td>";
                                   }else{
                                   echo 
                    "<td bgcolor=\"#CCCCFF\">&nbsp;</td>";
                                   } 

                    noch jemand ne idee?
                    danke
                    Zuletzt geändert von frank_muc; 15.05.2004, 13:01.

                    Kommentar


                    • #11
                      einen tipp bitte

                      ich noch mal.
                      ich habe nun einiges hinbekommen:

                      innerhalb der whileschleife werden mir alle vorhandenen datensätze ausgegeben. ausserhalb immer nur der erste, so oft meine for schleife läuft.
                      wie komme ich hier auch an alle datensätze. habe schon alles mögliche ausprobiert.
                      PHP-Code:
                                while($mydaten mysql_fetch_array($resultMYSQL_ASSOC))  {
                                 
                      $id=$mydaten["id"];
                                 
                      $termin=$mydaten["daten"];
                                }
                      //end while

                                 
                      for($l=0$l<7;$l++){
                                            if(
                      $x == $kkkk) {
                                            
                      $caltime "30";
                                            
                      $where =($wochentag[$l].".".$caltime);
                                            echo 
                      $id;
                                     if (
                      $where == $id) { //foreach($row as $where) { //
                                     
                      echo "<td bgcolor=\"#FFFFFF\"><a href=\"javascript:open_nachricht($j,".$termin.")\" class=\"anzeige\">";
                                     echo 
                      "<a href=\".$termin\">".$termin;
                                     echo 
                      "</a></td>";
                                     }else{
                                     echo 
                      "<td bgcolor=\"#CCCCFF\">&nbsp;</td>";
                                     }
                                     if(
                      $wochentag[$l]==6) echo "</tr><tr><td>&nbsp;</td>";
                                              } 
                      //end if
                                 
                      }//end for 
                      vielen dank

                      Kommentar


                      • #12
                        Wie von asp2php bereits beschrieben muss du die daten so speichern:
                        PHP-Code:
                        while($daten[] = mysql_fetch_array($resultMYSQL_ASSOC)); 
                        Allerdings kannst du dein array jetzt nicht mehr mit $daten['id'] ansprechen sondern musst $daten[0]['id'],$daten[1]['id'], usw schreiben.

                        Kommentar

                        Lädt...
                        X