PDA

Vollstndige Version anzeigen : dynamischer (wechselnder) tablelen-name


gerhard
12-08-2004, 10:33
wer kann mir bei wechselnden tabellennamen helfen?

ich habe mehrere mysql-tabellen (mit identer struktur) und mchte mit hilfe einer schleife deren felder in (unterschiedlich bezeichneten) php-tabellen einlesen:

mysql-tabelle "mitarbeiter" und
mysql-tabelle "kunden"

in der (php-)tabelle "datenliste" steht auf

datenliste[0] = "mitarbeiter" und
datenliste[1] = "kunden"

<?php


for($i=0;$i<count($datenliste);$i++)
{
$result = mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name");
while($row = mysql_fetch_array($result))
{

HIER SOLL EINE TABELLE ENSTEHEN, DEREN NAME $datenliste[$i] IST UND AUF DER DIE DATEN BERTRAGEN WERDEN SOLLEN:

$datenliste[$i] = $row[name] FUNKTIONIERT ABER NICHT

$$datenliste[$i] = $row[name] AUCH NICHT!!!

} // ende der while-schleife

} // ende der for-schleife


wer kann weiterhelfen?

c4
12-08-2004, 10:39
datenliste[0] = "mitarbeiter" und
datenliste[1] = "kunden" Die fehlenden Dollarzeichen sind doch aber im Skript vorhanden, nicht wahr?

Auch wenn an der Abfrage sicher nichts falsch ist, schreib's mal so: mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name") or die(mysql_error()); Wenn Du eh mit assoziativen Arrays arbeitest, dann kannst Du auch mysql_fetch_assoc() statt mysql_fetch_array() nutzen.

Wenn Du Felder assoziativer Arrays ansprichst, dann setz sie bitte auch in " oder ', besser aber ', also so:$variable['feld'] Bei der Verwendung von Variablen als Feldbezeichner ist das natrlich nicht notwendig.

Und was funktioniert eigentlich nicht? Fehlermeldungen? Falscher Inhalt? Klodeckel fllt runter? ...?

gerhard
12-08-2004, 10:49
danke fr die prompte antwort --> nur ist mir das zu hoch (ich bin zu bld dazu)(?)

also:

wenn ich anstatt mysql_fetch_array() das "mysql_fetch_assoc()" fr die while-abfrage benutze:

wie sieht dann die zuweisung der felsinhalte in der whiole-schleife aus?

???? =$row[name]


$familienname[$datenliste[$i]]= $row[name] ???????

(ergbe eine 2-dimensionale tabelle mit namen "familienname" ????

c4
12-08-2004, 10:53
Habe ich das so kompliziert geschrieben?

Wenn Du mysql_fetch_assoc() nutzt, dann sieht das Ganze nicht viel anders aus: $result=mysql_db_query(...) or die(mysql_error());
while ($row=mysql_fetch_assoc($result)) {
echo $row['id'].$row['name']...;
} Ganz simpel also.

Der Unterschied zwischen mysql_fetch_assoc() und mysql_fetch_array() ist einfach der, dass mysql_fetch_assoc() NUR assoziative Arrays ausspuckt und mysql_fetch_array() assoziative UND numerische gleichzeitig. mysql_fetch_array() frisst also blo mehr Speicher. Wenn man das numerische Zeugs nicht braucht, kann man es also auch weglassen.

Also ich glaube, DAS war unverstndlich geschrieben... ;)

gerhard
12-08-2004, 11:14
tut mir leid - mglich, dass ich irgendwie am falschen gleis (dampfer) bin ... oder doch zu wenig php-sattelfest...

mein problem war, dass ich einen array-namen (in php) innerhalb einer "for"-schleife fr eine abfrage (while) mit jedem for-durchgang anders benennen will:

ich will, dass beim 1. durchgang der for-schleife ein php-array entsteht mit dem namen "mitarbeiter" (weil im array, das mittels der for-schleife abgearbeitet wird, im ersten elemente "mitarbeiter" drinnsteht), im 2. durchgang soll ein (weiteres) php-array mit dem namen "kunden" (im 2. element des arrays steht nmlich "kunde" ... und falls im 3. element "vereinsmitglieder" steht, soll ein array mit dem namen "vereinsmitglieder" entstehen).

innerhalb der forschleife wird

1) die entsprechende datebank-tabelle (also zuerst "mitarbeiter", dann "kunden" ... etc) mit "query" abgefragt und
2) die werte aus der mysql-tabelle in das entsprechende arry bertragen

also:

for($i=0;$i<count($datenliste);$i++)
{
$result = mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name");
while($row = mysql_fetch_array($result))
oder "while ($row=mysql_fetch_assoc($result))"
{

xxxxx[] = $row[name]

wobei "xxxx" beim ersten durchlauf fr "mitarbeiter", beim zweiten . durchlauf "kunden" (usw) steht


} // ende der while-schleife

} // ende der for-schleife


sorry, wenn ich dich nerve ... --> und danke fr deine geduld!

c4
12-08-2004, 11:22
Willst Du wissen, was nervig ist? Das:
--> http://selfphp.com/forum/showthread.php?threadid=8367
Das mal so am Rndchen.

Ich merke, dass ich also einen entscheidenen Teil aus Deinem Skript weggelassen habe. Nchster Versuch: $x=0;
for($i=0; $i<count($datenliste); $i++) {
$result = mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name");

// Willst Du wirklich nur die Eintrge in einem Array haben und spter damit was machen, dann reicht das
while ($row[$datenliste[$i]][] = mysql_fetch_assoc($result));

// Ansonsten schreibst Du es wie gewohnt so
while ($row[$datenliste[$i]][$x] = mysql_fetch_assoc($result)) {
echo $row[$datenliste[$i]][$x]['feldname_aus_Abfrage'];
}
$x++;
} Alles klarofix? :)

Gweilo
12-08-2004, 11:26
vielleicht wirds verstndlicher, wenn du dies hier (http://ch2.php.net/manual/de/function.mysql-fetch-assoc.php) (und die anderen fetches) durchliest.

Der einzige unterschied sind halt die verschiedenen arten von Ausgaben:

mysql_fetch_assoc: assoziatives array (hashtabelle)
mysql_fetch_array: assoz. array und normales array
mysql_fetch_row: nur normales array
mysql_fetch_obj: objekt

gerhard
12-08-2004, 11:27
ich glaub, jetzt kapier ichs ...

werds gleich praktisch ausprobieren und mich wieder melden:

-- mit lob- und jubelmeldung oder
-- dann endgltig verzeifelt

jedenfalls vorerst DANKE!

c4
12-08-2004, 11:30
Ein Tipp noch: Um mal wieder den berblick ber den Inhalt eines Arrays zu gewinnen, schreibst Du einfach das:print_r($array_name); Im Browser sieht das sicherlich sinnlos aus, darum tut man sich dafr einfach den den Quelltext der Seite an.

Wird Dir sicher einige Male recht ntzlich sein, das Funktinchen.