sql-statements in der schleife

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • sql-statements in der schleife

    hi

    ich erstelle über eine whileschleife einige sql-statements.
    wie schaffe ich es nun das ich die wieder auslesen kann?
    zurzeit sieht es so aus:

    $sql = ...;
    $result = mysql_query($sql, $conn);

    bei jeder schleife wird halt das result wieder überschrieben.

    kann man so irgendwie in der art lösen??:
    PHP Code:
    while(...) 

    $i++ 
    .. 
    $sql = ...; 
    $result "_" $i mysql_query($sql$conn);
    ... 

    oder geht das eher auf array basis?:

    PHP Code:
    while(...) 

    $i++ 
    .. 
    $sql = ...; 
    $result[$i] = mysql_query($sql$conn);
    ... 

    lg daniel
    Last edited by cheeby; 20-01-2003, 09:24.
    Seien wir realistisch, versuchen wir das unmögliche. - Chè Guavara

  • #2
    wenn du die results außerhalb der schleife verwenden willst, wäre das array besser, dann würde ich aber auch die dazugehörige sql-abfrage in das array reinschreiben
    Ich denke, also bin ich. - Einige sind trotzdem...

    Comment


    • #3
      also jetzt versteh ich nur noch bahnhof.
      kannst mir das ein bisschen erklären?
      Seien wir realistisch, versuchen wir das unmögliche. - Chè Guavara

      Comment


      • #4
        du haslt folgenden code
        PHP Code:
        while (irgendne bedingung)
        {
          
        $i++;
          
        $sql="select * from table1 where id=$i"//doofes statement, ich weiß
          
        $result=mysql_query($sql);

        wo verwendest du jetzt $result?
        auch in dieser schleife?
        außerhalb der schleife?

        wenn du's innerhalb der schleife verwendest, dann brauchst du ja gar nix ändern (daher denk ich mal, du verwendest es außerhalb der schleife )

        außerhalb der schleife:
        PHP Code:
        $result=array();
        while (
        irgendne bedingung)
        {
          
        $i++;
          
        $sql="select * from table1 where id=$i"//doofes statement, ich weiß
          
        $result["$sql"]=mysql_query($sql);
        }
        //Ausgabe
        echo "<table><tr><th>Abfrage</th><th>resource identifier</th></tr>";
        foreach (
        $result as $key => $value)
          echo 
        "<tr><td>$key</td><td>$value</td></tr>";
        echo 
        "</table>"
        btw: So bekommst du natürlich nur den resource identifier zurück,den du für mysql_fetch_array-aufrufe verwenden solltest.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Comment


        • #5
          also ich verwende es außerhalb der schleife.

          hier mal die schleife:

          PHP Code:
          $search "test"
          $i 0
          while (
          $row mysql_fetch_row($result))  
          {  
              
          $tabs $row[0];  
              
          $sql "describe $tabs";  
              
          $result1 mysql_query($sql$conn);   
              while (
          $row mysql_fetch_row($result1))  
              {    
                  if (
          $row[1] == "text")   
                  {    
                      if (
          $sql_query)    
                      {     
                          
          $sql_query .= "or ";    
                      }    
                      
          $sql_query .= $row[0] . " like '%$search%' ";     
                  }
              }  
              if (
          $sql_query)  
              {       
                  
          $i++;   
                  
          $sql_query_fertig "select * from " $tabs " where " $sql_query "<br><br>";    
                  
          $result2$i] = mysql_query($sql_query_fertig$conn);  
              }    
              
          #querys wieder entleeren  
              
          $sql_query "";  
              
          $sql_query_fertig ""

          wie les ich jetzt die results extern aus?
          Seien wir realistisch, versuchen wir das unmögliche. - Chè Guavara

          Comment


          • #6
            und jemand ne lösung?

            ich hab keinen plan wie ich das ausgeben soll.
            Seien wir realistisch, versuchen wir das unmögliche. - Chè Guavara

            Comment


            • #7
              Hi DU,

              bin mir nicht sicher, ob ich es richtig verstanden habe, aber Du versuchtst doch den Datentyp der einzelnen Spalten auszulesen, um auf ihnen eine Suche durchzuführen ???

              Schreib mal kurz, was Du damit bezwecken willst.
              Denn wenn man den Hintergrund kennt, kann man eher was dazu sagen.

              Grüße, Ultra.

              Comment


              • #8
                Original geschrieben von Ultra
                Hi DU,

                bin mir nicht sicher, ob ich es richtig verstanden habe, aber Du versuchtst doch den Datentyp der einzelnen Spalten auszulesen, um auf ihnen eine Suche durchzuführen ???
                Ja ich lese zuerst die gesamten tabellen einer datenbank aus, und dann die jeweiligen spalten bei denen der datentyp zutrifft.
                Soweit funktioniert das ganze.
                Aus diesen Informationen baue ich mir dann ein sql-statement mit dem ich die jeweilige tabelle und die spalten darin einer volltextsuche unterziehe.
                Also es geht drum das ich egal wieweit die datenbank erweitert wird, das suchscript so lassen kann.

                nur mein problem ist das ich mit der whileschleife das $result2 immer überschreibe und es irgendwie nicht auslesen kann.
                wenn mir jetzt noch wer sagt wie das funkt bin ich verdammt glücklich.
                (muss sagen bin noch halber noob)

                Original geschrieben von Ultra

                Schreib mal kurz, was Du damit bezwecken willst.
                Denn wenn man den Hintergrund kennt, kann man eher was dazu sagen.

                Grüße, Ultra.
                Also zusammengefasst ist der zweck der alle spalten des typen text einer volltextsuche zu unterziehen. Und die jeweiligen datenbankstrukturinfos auszulesen( also ich kann das script für jede beliebige datenbank hernehmen). ausgegeben sollten alle datensätze werden die das gesuchte wort enthalten.
                Seien wir realistisch, versuchen wir das unmögliche. - Chè Guavara

                Comment


                • #9
                  PHP Code:
                  // $result2 hier initialisieren, da es sonst nach der Schleife out of scope kommt !
                  $result2=array();

                  $search "test"
                  // unnötig
                  //$i = 0; 
                  while ($row mysql_fetch_row($result))  
                  {  
                      
                  // sql_query initialisieren, sonst gibs bei "$sql_query.= ..." ne Warnung !
                      
                  $sql_query="";
                      
                  $tabs $row[0];  
                      
                  $sql "describe $tabs";  
                      
                  $result1 mysql_query($sql$conn);   
                      while (
                  $row mysql_fetch_row($result1))  
                      {    
                          if (
                  $row[1] == "text")   
                          {                
                              if (
                  $sql_query)    
                              {     
                                  
                  $sql_query .= "or ";    
                              }    
                              
                  $sql_query .= $row[0] . " like '%$search%' ";    
                          }
                      }  
                      if (
                  $sql_query)  
                      {       
                          
                  //$i++;   unnötig
                          
                  $sql_query_fertig "select * from " $tabs " where " $sql_query "<br><br>";    
                          
                  // hier fehlte ein [ vor $i 
                          // $i ist unnötig
                          
                  $result2[] .= mysql_query($sql_query_fertig$conn);  
                      }    
                      
                  #querys wieder entleeren  
                      // wird oben initialisiert
                      // $sql_query = "";  
                      
                  $sql_query_fertig ""

                  oder kurz
                  PHP Code:
                  $result2=array();
                  $search "test"
                  while(
                  $row1 mysql_fetch_row($result)) {  
                      
                  $sql "describe ".$row1[0];  
                      
                  $result1 mysql_query($sql$conn);   
                      
                  $sql_query="";
                      while (
                  $row2 mysql_fetch_row($result1))  
                          
                  $sql_query.=$row2[1]=="text"?(($sql_query?" or ":"").$row2[0] . " like '%$search%' "):""
                      if(
                  $sql_query)  
                          
                  $result2[] .= mysql_query("select * from ".$row1[0]." where ".$sql_query$conn);  

                  TBT

                  Die zwei wichtigsten Regeln für eine berufliche Karriere:
                  1. Verrate niemals alles was du weißt!


                  PHP 2 AllPatrizier II Browsergame

                  Comment


                  • #10
                    Original geschrieben von TBT
                    PHP Code:

                     
                    while ($row2 mysql_fetch_row($result1))  
                      
                    $sql_query.=$row2[1]=="text"?(($sql_query?" or ":"").$row2[0] . " like '%$search%' "):""
                    also das is mir persönlich zu hoch, kannst mir den teil bitte kurz erklären?

                    daniel
                    Seien wir realistisch, versuchen wir das unmögliche. - Chè Guavara

                    Comment


                    • #11
                      PHP Code:
                      $a $b $c $d;
                      // ist die Kurzschreibweise für
                      if( $b )
                        
                      $a $c;
                      else
                        
                      $a $d;

                      $a .= $b;
                      //ist kurz für
                      $a $a $b

                      also:
                      PHP Code:
                      while ($row mysql_fetch_row($result1)) {    
                          if (
                      $row[1] == "text"){                
                              if (
                      $sql_query){     
                                  
                      $sql_query .= "or ";    
                              }    
                              
                      $sql_query .= $row[0] . " like '%$search%' ";    
                          }
                      }

                      // wird zu
                      while ($row mysql_fetch_row($result1)) {    
                          if (
                      $row[1] == "text"){                
                              
                      //if ($sql_query){     
                              //    $sql_query .= "or ";    
                              //}
                              
                      $sql_query .= $sql_query " or " "";    
                              
                      $sql_query .= $row[0] . " like '%$search%' ";    
                          }
                      }
                      // wird zu
                      while ($row mysql_fetch_row($result1)) {    
                          if (
                      $row[1] == "text"){                
                              
                      //$sql_query .= $sql_query ? " or " : "";    
                              //$sql_query .= $row[0] . " like '%$search%' ";    
                              
                      $sql_query .= ($sql_query " or " "").$row[0] . " like '%$search%' ";
                          }
                      }
                      // wird zu
                      while ($row mysql_fetch_row($result1)) {    
                          
                      //if ($row[1] == "text"){                
                          //    $sql_query .= ($sql_query ? " or " : "").$row[0] . " like '%$search%' ";
                          //}
                          
                      $sql_query .= $row[1] == "text" ? (($sql_query " or " "").$row[0] . " like '%$search%' "):"";
                      }
                      // fertig 
                      TBT

                      Die zwei wichtigsten Regeln für eine berufliche Karriere:
                      1. Verrate niemals alles was du weißt!


                      PHP 2 AllPatrizier II Browsergame

                      Comment


                      • #12
                        danke also es funktioniert jetzt soweit das ich durch diese abfrage im html:

                        PHP Code:
                        <?
                          foreach($result2 as $ausgabe)
                          {
                        ?>  
                        <tr>
                        <td></td>
                        <td></td>
                        <td>
                        <? echo $ausgabe ?>
                        </td>
                        <td></td>
                        <td></td>
                        </tr>
                        <?
                        }
                        ?>
                        dann das bekomme -->

                        Resource id #5
                        Resource id #6
                        Resource id #7
                        ...

                        was mach ich da jetzt falsch?? muss dazu sagen das ich bis jetzt sehr selten mit arrays konfrontiert war.
                        Seien wir realistisch, versuchen wir das unmögliche. - Chè Guavara

                        Comment


                        • #13
                          da sind mysql Ergebnisse drin, also wenn dann

                          PHP Code:
                          for($i=0;$i<count($result2);++$i){
                            while(
                          $row=mysql_fetch_array($result2[$i])){
                            {  
                              
                          // hier deine Ausgabe mit $row
                            
                          }

                          und nach getaner Arbeit alle mysql ressourcen wieder freigeben !
                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Comment


                          • #14
                            wenn freigeben, dann nach getaner arbeit auf ein result, nicht nach getaner arbeit an allen reults
                            PHP Code:
                            for($i=0;$i<count($result2);++$i){
                              while(
                            $row=mysql_fetch_array($result2[$i])){
                              {  
                                
                            // hier deine Ausgabe mit $row
                              
                            }
                              
                            mysql_free_result($result2[$i]);

                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Comment


                            • #15
                              mysql-querys innerhalb einer while-schleife sind eine ziemlich schlechte idee.
                              es erfordert jedes mal wieder eine verbindung zwischen webserver und mysql-server (query senden, ergebnis zurückgeben, query senden, ergebnis zurückgeben, query senden, ergebnis zurückgeben, ...) was auf beiden maschinen die last nach oben treibt.

                              du solltest mal drüber nachdenken, ob sich das nicht auch ressourcenschonender realisieren lässt...
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Comment

                              Working...
                              X