David: mysql: Abfrage zusammenfassen

Hallo,

wer kann folgende Abfragen zu einer Abfrage zusammenfassen?

$result=mysql_query("select * from teilebestellung where spielID=$spielID");
  if ($result==FALSE) {
   die(mysql_error($db));
  }
while ($row=mysql_fetch_row($result)) {
$result_u=mysql_query("select * from teile where bestellID=$row[0]");
  if ($result_u==FALSE) {
   die(mysql_error($db));
  }
while ($row_u=mysql_fetch_row($result_u)) {
echo ("Datum: $row[5]&nbsp;&nbsp; Teil: $row_u[0]-$row_u[1]<br>");
}// end while2
}// end while

Grüße, David

  1. Hello,

    wer kann folgende Abfragen zu einer Abfrage zusammenfassen?

    na hoffentlich DU, nachdem du die Join-Artikel im SELFHTML-Datenbanken-Bereich gelesen hast.
    Die Bestandteile hast du jetzt schon: Abfragen und Kriterien, nach denen die Abfragen verbunden sind.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Wenn du die Nadel im Heuhaufen nicht findest, zünde den Heuhaufen an.
    1. Hallo Rouven,

      dank Dir für den Link. Hab mich mal eingelesen, verstehs aber nicht so recht. Dachte zuerst, ganz einfach, aber die Tücke liegt im Detail. Dann fehltenm mysql Aliasse, danach wars irgendwas anderes.
      Und zum guten Schluß wars irgendwie nur noch Rumraterei.
      Hast Du noch nen Tip für mich?
      Grüße, David

      1. Hi Rouven,

        ich hatte nur einen kleinen Denkfehler drin. Jatzt hab ichs begriffen. Gar nicht mal so schwer!

        select
        b.xxx,
        b.yyy,
        t.ddd,
        t.rrr,
        t.uuu
        FROM tab1 b, tab2 t
        WHERE b.bestellID = t.bestellID AND b.SpielID=$SpielID

        Richtig so? Oder gehts noch leichter?

        Grüße, David

        1. Hello,

          Richtig so? Oder gehts noch leichter?

          Es geht sauberer. Implizite Joins neigen dazu undurchsichtig zu werden.
          SELECT
          b.xxx,
          b.yyy,
          t.ddd,
          t.rrr,
          t.uuu
          FROM
             tab1 b
          INNER JOIN
             tab2 t
          ON b.bestellID = t.bestellID
          WHERE b.SpielID = $SpielID

          MfG
          Rouven

          --
          -------------------
          sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
          Because good guys need a break every once in a while.  --  Morty in "Click" (Columbia Pictures, 2006)
        2. Hallo,

          ich hatte nur einen kleinen Denkfehler drin. Jatzt hab ichs begriffen. Gar nicht mal so schwer!

          schön.

          select
          b.xxx,
          b.yyy,
          t.ddd,
          t.rrr,
          t.uuu
          FROM tab1 b, tab2 t
          WHERE b.bestellID = t.bestellID AND b.SpielID=$SpielID

          Richtig so? Oder gehts noch leichter?

          Schöner. Mit der expliziten JOIN-Syntax, siehe gern auch die Titel unser beiden Artikel :-)

            
          SELECT                         -- Gib mir  
              b.xxx,                     -- die gewünschten  
              b.yyy,                     -- Spalten  
              t.ddd,  
              t.rrr,  
              t.uuu,  
          FROM                           -- aus Tabelle  
              tab1 b                     -- tab1, die mit b angesprochen wird und  
          INNER JOIN                     -- mit der Tabelle  
              tab2 t                     -- tab2, die hier mit t angesprochen wird  
          ON                             -- über die Bedingung  
              b.bestellID = t.bestellID  -- gleicher Werte in den Spalten bestellID  
                                         -- verknüpft ist,  
          WHERE                          -- wobei nur die Datensätze berücksichtigt  
              b.SpielID = <Vorgabe>      -- werden, die in der Spalte SpielID den  
                                         -- Vorgabewert enthalten  
          
          

          Ich bevorzuge diese Schreibweise, weil sie klar macht, über welche Bedingung die Tabellen miteinander verknüpft sind (JOIN-Bedingung) und welche Einschränkungen für die Ergebnismenge gelten (WHERE-Klausel).

          Spätestens bei der Verknüpfung dreier Tabellen kannst Du mit dem Komma-Operator bei der Aufzählung der Tabellen mit impliziten Joins (Deine Version) Schiffbruch erleiden, weil die Reihenfolge der Aufzählung seit MySQL 5.0.12 eine wichtige Rolle spielt - und nicht beliebig ist.

          Beim OUTER JOIN gibt es meiner Meinung nach heutzutage sowieso keine Alternative zur expliziten JOIN-Syntax, so dass es kein erhöhter Lernaufwand ist, sich gleich mit dieser vertraut zu machen.

          Freundliche Grüße

          Vinzenz