phillip: mysql auslese in 2 schleifen

hallo!

folgenden code habe ich:
$out2 = @mysql_query("select * from ".$prefix."_liga_teilnehmer where liga_id='".$_POST["liga_id"]."';", $sql_id);
         $out3 = @mysql_query("select * from ".$prefix."_liga_teilnehmer where liga_id='".$_POST["liga_id"]."' ORDER by RAND();", $sql_id);

while ($row2 = @mysql_fetch_array($out2))
 {
  while ($row3 = @mysql_fetch_array($out3))
   {
    echo "".$row2["user_id"]." : ".$row3["user_id"]."";
    echo "<br>";
   }
 }

ich habe wie man sieht 2 schleifen. der erste durchgang beider schleifen funktioniert auch wunderbar. doch eben nur der. also die obere schleife wird kein zweites mal ausgeführt. liegt das daran, dass beide auf die gleiche tabelle in der datenbank zugreifen? muss man da irgendwie mysql_data_seek() einbauen? ich hab das schon probiert, doch ohne erfolg. wäre euch dankbar, wenn einer eine lösung weiß.
vielen dank,

phillip

  1. Hi,

    while ($row2 = @mysql_fetch_array($out2))
    {
      while ($row3 = @mysql_fetch_array($out3))
       {
        echo "".$row2["user_id"]." : ".$row3["user_id"]."";
        echo "<br>";
       }
    }

    du verwechselst vermutlich mysql_fetch_array mit mysql_fetch_row - mysql_fetch_array gibt, wie der Name sagt, einmalig ein Array mit dem kompletten Inhalt zurück. Ersetze es durch mysql_fetch_row oder rufe es einmalig vor der Schleife auf und ersetze das while durch ein foreach.

    Schöne Grüße
    Julian

    --
    "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rich Cook
    http://derjulian.net
  2. Hallo Phillip,

    in Deinen while-Schleifen sehe ich einfach keine Bedingungen, wie lange sie laufen sollen. Zum Beispiel solange, wie auch Anzahl der Datensätze per WHERE-Bedingung ausgewählt wurden( Funktion  mysql_num_rows ).

    $i=1;
    while ($i<=$num_rows)
    am Ende der Schleife $i um 1 erhöhen mit $i++

    Versuch es einfach mal.

    Jörg

    1. Moin!

      in Deinen while-Schleifen sehe ich einfach keine Bedingungen, wie lange sie laufen sollen.

      Ich schon, und die angewandte Methode ist durchaus üblich:

        
      while ($row2 = @mysql_fetch_array($out2))  
      
      

      Die Funktion mysql_fetch_array ergibt entweder ein Array mit DB-Inhalten, sofern noch eines im Abfrageergebnis enthalten ist, oder FALSE.

      Unabhängig davon, welches Ergebnis die Funktion ergibt, wird es in jedem Fall in der Variablen $row2 gespeichert.

      Und jetzt der Trick: Der an die Variable zugewiesene Wert wird außerdem auch als Ergebnis dieser Zuweisung nach "außen" gegeben, und "außen" ist in diesem Fall die while-Schleifenbedingung.

      Mal für dich zum Ausprobieren:

        
      echo 2 + 4; // Gibt 6 aus - so kennt man es.  
      echo $i = 5 + 4; // gibt 9 aus und speichert das auch in $i  
        
      while ($i) // Prüft, ob in $i etwas steht, was PHP als "wahr" ansieht - nur dann wird die while-Schleife ausgeführt  
      {  
        echo $i; // Zur Kontrolle den Wert von $i ausgeben (anfänglich 9)  
        $i--; // $i um 1 verringern.  
      }  
      
      

      - Sven Rautenberg

      --
      My sssignature, my preciousssss!
  3. echo $begrüßung;

    muss man da irgendwie mysql_data_seek() einbauen?

    Ja.

    ich hab das schon probiert, doch ohne erfolg.

    Was genau hast du probiert?

    wäre euch dankbar, wenn einer eine lösung weiß.

    Nach der while($row3...-Schleife ein mysql_data_seek($out3, 0); sollte es tun.

    echo "$verabschiedung $name";