astero: laufvariable bei php und mysql

hallo,

ich habe in einer datenbank funf tabellen... habe mir überlegt, nicht jedesmal eine while-schleife für jede einzelne tabelle zu schreiben. daher habe ich in eine sechste tabelle die tabellennamen reingeschrieben, die ich mit der zweile (while($row2....)) abfrage. ich habe das hier entworfen:

<?PHP  
$sql2 = "SELECT `tabelle` FROM `sechstetabelle` ORDER BY `nr` DESC";  
$result2 = mysql_query($sql2);  
  
// Diesen code habe ich jetzt funfmal:  
  
$vsql1...5 = "SELECT `image` FROM `tabellenname` ORDER BY `nr` DESC";  
$vresult1...5 = mysql_query($vsql1...5);  
  
$j=0;  
while($row2 = mysql_fetch_object($result2)){  
 $tabelle=$row2->tabelle;  
 $j+=1;  
 echo "var viewer$j = new PhotoViewer();\n";  
 while($vrow1...5 = mysql_fetch_object($vresult1...5)){  
  echo "viewer$j.add('foto/$tabelle/$vrow1...5->image;');\n";  
 }  
}  
?>

nur leider klappt es nicht.

die HTML ausgabe sieht dann so aus:

var viewer1 = new PhotoViewer();
viewer1.add('foto/tabellenname/01.jpg;');
viewer1.add('foto/tabellenname/02.jpg;');
viewer1.add('foto/tabellenname/03.jpg;');
viewer1.add('foto/tabellenname/04.jpg;');
viewer1.add('foto/tabellenname/05.jpg;');
viewer1.add('foto/tabellenname/06.jpg;');
viewer1.add('foto/tabellenname/07.jpg;');
viewer1.add('foto/tabellenname/08.jpg;');
viewer1.add('foto/tabellenname/09.jpg;');
viewer1.add('foto/tabellenname/10.jpg;');
viewer1.add('foto/tabellenname/11.jpg;');
viewer1.add('foto/tabellenname/12.jpg;');
viewer1.add('foto/tabellenname/13.jpg;');
viewer1.add('foto/tabellenname/14.jpg;');
viewer1.add('foto/tabellenname/15.jpg;');
viewer1.add('foto/tabellenname/16.jpg;');
viewer1.add('foto/tabellenname/17.jpg;');
viewer1.add('foto/tabellenname/18.jpg;');
viewer1.add('foto/tabellenname/19.jpg;');
viewer1.add('foto/tabellenname/20.jpg;');
var viewer2 = new PhotoViewer();
var viewer3 = new PhotoViewer();
var viewer4 = new PhotoViewer();
var viewer5 = new PhotoViewer();

wieso werden die anderen "viewer"'s nicht aufgefüllt, mit den inhalten aus den entsprechenden tabellen?

viele Grüße
astero

  1. Hallo Astero,

    1.) Wenn du "SHOW TABLES" anwendest, dann brauchst du keine 6-te Tabelle.

    2.) Ich vermute die $result(x) Variable wird irgendwo reinitialisiert. Wenn du den tatsächlichen Code 1:1 postest, könnte man den Fehler finden.

    Gruß Alexander.

    1. Hallo Alexander,

      vielen Dank, für Deine Hilfe. Der gesamte Code sieht so aus: Noch mal ganz kurz erwähnt. In der Tabelle "fotos" stehen genau die Tabellennamen: f_sommer2004 bis f_sommer2005.

      <?PHP  
      mysql_connect("localhost", "xxxxxx", "xxxxxx") or die ("Keine Verbindung");  
      mysql_select_db("xxxxxx") or die ("Keine Datenbank");  
        
      $sql2 = "SELECT `tabelle` FROM `fotos` ORDER BY `nr` DESC";  
      $result2 = mysql_query($sql2);  
        
      $vsql1 = "SELECT `image` FROM `f_sommer2008` ORDER BY `nr` DESC";  
      $vresult1 = mysql_query($vsql1);  
        
      $vsql2 = "SELECT `image` FROM `f_sommer2007` ORDER BY `nr` DESC";  
      $vresult2 = mysql_query($vsql2);  
        
      $vsql3 = "SELECT `image` FROM `f_sommer2006` ORDER BY `nr` DESC";  
      $vresult3 = mysql_query($vsql3);  
        
      $vsql4 = "SELECT `image` FROM `f_sommer2005` ORDER BY `nr` DESC";  
      $vresult4 = mysql_query($vsql4);  
        
      $vsql5 = "SELECT `image` FROM `f_sommer2004` ORDER BY `nr` DESC";  
      $vresult5 = mysql_query($vsql5);  
        
      mysql_close();  
      ?>  
        
      <script type="text/javascript">  
      /* <![CDATA[ */  
      	<?PHP  
      	$j=0;  
      	while($row2 = mysql_fetch_object($result2)){  
      		$tabelle=$row2->tabelle;  
      		$j+=1;  
      		echo "var viewer$j = new PhotoViewer();\n";  
      		while($vrow1 = mysql_fetch_object($vresult1)){  
      			echo "viewer$j.add('fotograflar/$tabelle/$vrow1->image;');\n";  
      		}  
      	}  
      	?>  
      /* ]]> */  
      </script>
      

      Viele Grüße
      Astero

      1. Hallo,

        ist es denn sinnvoll, einen Haufen Tabellen mit der gleichen Struktur anzulegen? Dann doch lieber eine Spalte z.B. "kategorie" (mit "Sommer 2003", "Sommer 2004" etc.) einfügen, dann hast Du alle Daten in einer Tabelle

        Grüße Sebastian

        --
        Das größte Übel der heutigen Jugend besteht darin, dass man nicht mehr dazugehört.
        Salvador Dali
        1. Hallo,

          so, habe jetzt die Tabelle so erweitert, wie Ihr es gemeint habt. Ich habe nun eine zusätzliche Kategorie mit Album, wo sommer2008 ... steht.

          Wie muss ich jetzt die While Schleife aufbauen, so dass ich z.B. so sowas habe:

          var viewer1 = new PhotoViewer();
          viewer1.add('foto/$album/$image');
          .
          .
          .
          wobei hier $album sommer 2008 ist.

          var viewer2 = new PhotoViewer();
          viewer2.add('foto/$album/$image');
          .
          .
          .
          und $album sommer 2007 ist.

          Viele Grüße
          Astero

          1. Hi,

            Wie muss ich jetzt die While Schleife aufbauen, so dass ich z.B. so sowas habe:

            Das Stichwort nannte ich dir bereits, es heisst Gruppenwechsel.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
      2. Moin!

        $vsql1 = "SELECT image FROM f\_sommer2008 ORDER BY nr DESC";
        $vresult1 = mysql_query($vsql1);

        $vsql2 = "SELECT image FROM f\_sommer2007 ORDER BY nr DESC";
        $vresult2 = mysql_query($vsql2);

        $vsql3 = "SELECT image FROM f\_sommer2006 ORDER BY nr DESC";
        $vresult3 = mysql_query($vsql3);

        $vsql4 = "SELECT image FROM f\_sommer2005 ORDER BY nr DESC";
        $vresult4 = mysql_query($vsql4);

        $vsql5 = "SELECT image FROM f\_sommer2004 ORDER BY nr DESC";
        $vresult5 = mysql_query($vsql5);

        Wenn du fünf Tabellen mit exakt dem gleichen Layout hast, deren einziges Unterscheidungskriterium ist, dass in jeder einzelnen Tabelle Bilddaten aus einem bestimmten Jahr stecken, dann kombiniere alle deine Tabellen zu einer einzigen, und füge ein weiteres Tabellenfeld "Jahr" an, um die Datensätze bei Bedarf auseinanderzuhalten.

        Eventuell ist es sogar schlauer, anstelle einer Jahreszahl direkt das Aufnahmedatum als DATE-Spalte einzufügen - dann kannst du bei Bedarf nicht nur nach Jahren gruppieren, sondern innerhalb der Jahre auch nach Monaten, Tagen, Wochentagen (Bilder von Sonntags), Monaten (Bilder aus dem Mai) etc.

        Wenn die Bilder auch noch eine Uhrzeit in ihren Metadaten haben, wäre sogar ein DATETIME-Feld richtig, dann kannst du auch "Bilder zur Geisterstunde (0-1 Uhr)" abfragen, oder "Bilder, halb Zehn in Deutschland".

        So, wie du es derzeit machst, ist es jedenfalls der falsche Weg.

        - Sven Rautenberg

        1. Hallo,

          das mit einer Tabelle und einer zusätzlichen Spalte ist mir Anfangs auch eingefallen, aber das was ich versuche ist was anderes.

          In mein erstes bzw. mein zweites Posting habe ich euch meine While-Schleifen vorstgestellt.

          undzwar möchte ich nachher sowas haben:

          var viewer1 = new PhotoViewer();
          viewer1.add('foto/f_sommer2008/1.jpg);
          viewer1.add('foto/f_sommer2008/2.jpg);
          viewer1.add('foto/f_sommer2008/3.jpg);

          var viewer2 = new PhotoViewer();
          viewer2.add('foto/f_sommer2007/1.jpg);
          viewer2.add('foto/f_sommer2007/2.jpg);
          viewer2.add('foto/f_sommer2007/3.jpg);

          var viewer3 = new PhotoViewer();
          viewer3.add('foto/f_sommer2006/1.jpg);
          viewer3.add('foto/f_sommer2006/2.jpg);
          viewer3.add('foto/f_sommer2006/3.jpg);

          var viewer4 ....
          viewer4.add ....

          var viewer5 ....
          viewer4.add ....

          Die Idee ist folgendes: Die Tabellennamen, die ich so gewählt habe sind auch gleichzeitig die Ordnernamen. Daher habe ich eine zusätzliche Tabelle erstellt, die nur die Tabellennamen enthalten, und somit mir den richtigen Pfad zu den Bilddateien sicherstellt. Der Grund ist der, dass meine Digi-Cam, den ich schon sehr lange habe, immer wieder mit der gleichen Nummer die Bilddateien benennt, wenn ich den Speicher formatiere. Das ist so bei meiner Digi-Cam.

          Zwar könnte ich in der Tabelle noch eine zusätzliche Spalte einfügen, wo ich den Ordner mitangeben kann, aber ich habe es lieber wenn ich mehrere Tabellen habe, auch wenn Ihr es nicht verstehen könnt.... :-)

          So falsch kann ja meine While-Schleife ja nicht sein. Ich brauche ja nur eine Laufvariable in der 2. While-Schleife. Und das bekomme ich nicht hin.

          Gruß
          Astero

          1. Hi,

            das mit einer Tabelle und einer zusätzlichen Spalte ist mir Anfangs auch eingefallen, aber das was ich versuche ist was anderes.

            Das ändert nichts daran, dass deine Jahrestabellen Unfug sind.

            undzwar möchte ich nachher sowas haben:

            var viewer1 = new PhotoViewer();
            viewer1.add('foto/f_sommer2008/1.jpg);
            viewer1.add('foto/f_sommer2008/2.jpg);
            viewer1.add('foto/f_sommer2008/3.jpg);

            var viewer2 = new PhotoViewer();
            viewer2.add('foto/f_sommer2007/1.jpg);
            viewer2.add('foto/f_sommer2007/2.jpg);
            viewer2.add('foto/f_sommer2007/3.jpg);

            Dazu braucht es trotzdem nicht mehrere Tabellen gleicher Struktur.

            Du möchtest dich informieren, wie man unter einem Gruppenwechsel versteht, und wie man in in Programmcode realisiert.

            Die Idee ist folgendes: Die Tabellennamen, die ich so gewählt habe sind auch gleichzeitig die Ordnernamen. Daher habe ich eine zusätzliche Tabelle erstellt, die nur die Tabellennamen enthalten, und somit mir den richtigen Pfad zu den Bilddateien sicherstellt.

            Den kannst du genauso gut im Script "sicherstellen", in dem du die aus einer Spalte der einen Tabelle Jahreszahl in den Ordnernamen einbaust.

            Der Grund ist der, dass meine Digi-Cam, den ich schon sehr lange habe, immer wieder mit der gleichen Nummer die Bilddateien benennt, wenn ich den Speicher formatiere. Das ist so bei meiner Digi-Cam.

            Ist aber kein Grund, das Datenmodell zu versauen.

            Zwar könnte ich in der Tabelle noch eine zusätzliche Spalte einfügen, wo ich den Ordner mitangeben kann, aber ich habe es lieber wenn ich mehrere Tabellen habe, auch wenn Ihr es nicht verstehen könnt.... :-)

            Es ist grober Unfug, auch wenn du das mit deinem jetzigen Kenntnisstand vielleicht noch nicht verstehen kannst.

            So falsch kann ja meine While-Schleife ja nicht sein.

            *Alles*, was du auf diesem grundfalschen Datenmodell aufbauend programmieren wirst, wird ebenso falsch sein.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
    2. Hallo,

      1.) Wenn du "SHOW TABLES" anwendest, dann brauchst du keine 6-te Tabelle.

      für die SHOW-Syntax gibt's kaum vernünftige Argumente. Verwende lieber das INFORMATION_SCHEMA, siehe z.B. </archiv/2008/9/t177097/#m1166487> ff.

      Ansonsten scheint das Tabellendesign des OP sehr verbesserungswürdig :-)
      Vermutlich benötigt er nur eine einzige Tabelle :-)

      Statt zu versuchen, etwas wie variable Variablen hinzubekommen, wäre die Verwendung von Arrays sinnvoller.

      Freundliche Grüße

      Vinzenz