peter: mysql-abfrage von 2 tabellen

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

  1. 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

    --
    Das ist der ganze Jammer, die Dummen sind immer so sicher und die Gescheiten so voller Zweifel.
    [Bertrand Russell]
  2. 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

    --
    The only program that runs perfectly every time, is a virus.
    1. 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?

      1. 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

        1. 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