laufvariable bei php und mysql
astero
- php
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
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.
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
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
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
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
Moin!
$vsql1 = "SELECT
image
FROMf\_sommer2008
ORDER BYnr
DESC";
$vresult1 = mysql_query($vsql1);$vsql2 = "SELECT
image
FROMf\_sommer2007
ORDER BYnr
DESC";
$vresult2 = mysql_query($vsql2);$vsql3 = "SELECT
image
FROMf\_sommer2006
ORDER BYnr
DESC";
$vresult3 = mysql_query($vsql3);$vsql4 = "SELECT
image
FROMf\_sommer2005
ORDER BYnr
DESC";
$vresult4 = mysql_query($vsql4);$vsql5 = "SELECT
image
FROMf\_sommer2004
ORDER BYnr
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
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
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
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