mysql-abfrage von 2 tabellen
peter
- php
hallo
ich habe folgende 2 tabellen:
tab1: (feld1,feld2)
tab2: (feld3,feld4)
ich mache nun folgende abfrage:
$result = mysql_query("SELECT * FROM tab1,tab2 where tab1.feld1=tab2.feld3");
while ($antwort = mysql_fetch_object($result))
{
echo $antwort->tab1.feld2;
echo $antwort->tab2.feld4;
}
die frage ist: wie kann ich die beiden felder (feld2 und feld4) ausgeben? leider geht's wie oben gezeigt nicht.
mit mysql_fetch_row($result) funktionierts mit dem nachteil, dass bei einer aenderung der felder die abfrage nicht mehr stimmt.
weiss vielleicht jemand wie man vorgehen muss?
gruss
peter
Hi Peter,
ich habe folgende 2 tabellen:
tab1: (feld1,feld2)
tab2: (feld3,feld4)ich mache nun folgende abfrage:
$result = mysql_query("SELECT * FROM tab1,tab2 where tab1.feld1=tab2.feld3");
while ($antwort = mysql_fetch_object($result))
{
echo $antwort->tab1.feld2;
echo $antwort->tab2.feld4;
}die frage ist: wie kann ich die beiden felder (feld2 und feld4) ausgeben? leider geht's wie oben gezeigt nicht.
mit mysql_fetch_row($result) funktionierts mit dem nachteil, dass bei einer aenderung der felder die abfrage nicht mehr stimmt.weiss vielleicht jemand wie man vorgehen muss?
Müsste normalerweise so funktionieren:
$result = mysql_query("SELECT tab1.feld2,tab2.feld4 FROM tab1,tab2 where tab1.feld1=tab2.feld3");
while ($antwort = mysql_fetch_assoc($result))
{
echo $antwort["feld2"];
echo $antwort["feld4"];
}
freundliche Grüsse,
Daniel
Halihallo peter
echo $antwort->tab1.feld2;
echo $antwort->feld2;
echo $antwort->tab2.feld4;
echo $antwort->feld4;
die frage ist: wie kann ich die beiden felder (feld2 und feld4) ausgeben? leider geht's wie oben gezeigt nicht.
Der Tabellenname wird _nicht_ übergeben, da diese gar nicht mehr
existieren. Ein ResultSet ist so wie eine ganze neue Tabelle, alte
Attributnamen werden zwar übernommen, jedoch gibt es keine
Möglichkeit die Attribute differenter Tabellen zu unterscheiden.
mit mysql_fetch_row($result) funktionierts mit dem nachteil, dass bei einer aenderung der felder die abfrage nicht mehr stimmt.
Dann kannst du bei mysql_fetch_object oder mysql_fetch_array bleiben.
Falls du einmal Namenskonflikte bekommst (tabelle1 und tabelle2 haben
jeweils einen oder mehrere gleichnamige Attribute), so verwende
Aliasnamen.
weiss vielleicht jemand wie man vorgehen muss?
Nur Attributnamen (Spaltennamen) verwenden, ohne Tabellenprefix. Bei
Namenskonflikt kann man Attributnamen über Alias ( col1
AS 'tab1_col1', z.B. ) zuweisen.
Viele Grüsse
Philipp
Nur Attributnamen (Spaltennamen) verwenden, ohne Tabellenprefix. Bei
Namenskonflikt kann man Attributnamen über Alias ( col1
AS 'tab1_col1', z.B. ) zuweisen.
es ist tatsächlich so, dass teilweise gleiche feldernamen bei beiden tabellen vorkommen. ich habe nun folgendes versucht, aber leider ohne erfolg:
$result = mysql_query("SELECT tab1.feld1 as testfeld,tab2.feld1 as testfeld2 FROM tab1,tab2");
while ($antwort = mysql_fetch_object($result))
{
echo $testfeld.' '.$testfeld2;
}
wo mache ich was falsch?
hi,
while ($antwort = mysql_fetch_object($result))
{
echo $testfeld.' '.$testfeld2;
wo mache ich was falsch?
du begreifst offenbar gar nicht, was die funktionen, die du da einsetzt, eigentlich machen.
aus dem beispiel von Philipp sollte doch erkennbar sein, wie du auf die eigenschaften eines objektes zugreifst - warum machst du das jetzt wieder komplett anders?
$antwort ist dein objekt, dass eine eigenschaft namens testfeld hat - also versuche nicht, echo $testfeld auszugeben, diese variable gibt es doch gar nicht.
mache es stattdessen analog zu Philipps beispiel - und lies dir auch im manual erst mal durch, was die funktionen, die du einsetzt, überhaupt bewirken, _bevor_ du sie einsetzt.
gruss,
wahsaga
mache es stattdessen analog zu Philipps beispiel - und lies dir auch im manual erst mal durch, was die funktionen, die du einsetzt, überhaupt bewirken, _bevor_ du sie einsetzt.
sorry, alles klar. natürlich liegt der result in der variablen antwort.
vielen dank
gruss
peter