Announcement

Collapse
No announcement yet.

Schleifen in Schleife

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Schleifen in Schleife

    Moin, moin!

    Hatte bislang 3 Schleifen die das gewünschte Ergebnis geliefert haben:
    PHP Code:
    $result_str mysql_query("SELECT * FROM (tbl,tbl2) 
    WHERE tbl.id = tbl2.id AND tbl.id = '"
    .$_REQUEST['id']."' 
    ORDER BY Level DESC,Strasse ASC "
    ) or die(mysql_error());
    while(
    $row mysql_fetch_array($result_str)){
    ... 
    Das wiederholt sich mit den beiden anderen Schleifen, nur eben anstelle tbl2 steht tbl3 oder tbl4 und die ORDER BY bezieht sich entsprechend auf die Spalten.
    Funktioniert auch ohne weitere Probleme.
    Jetzt soll hinzu kommen, dass diese 3 Schleifen in einer Schleife eingeschlossen werden sollen.
    Um eine Verbindung zwischen den 3 Tabellen zu erstellen habe ich ein neues Feld eingeführt, "verknuepfung". So kann der Benutzer DS aus den 3 Tabellen verknüpfen.
    Habe mir als Beispiel 3 DS in jede Tabelle geschrieben und versucht mit:
    PHP Code:
    $ausdrei mysql_query("SELECT * FROM (tbl,tbl2) 
    WHERE tbl.id = '"
    .$_REQUEST['id']."' 
    GROUP BY tbl2.verknuepft"
    ) or die(mysql_error());
    while(
    $row mysql_fetch_array($ausdrei))
    {... 
    Das Ergebnis ist, dass ich nun tatsächlich 3mal eine Datenausgabe erhalte, aber zum Einen alle DS erhalte. Dazu auch noch mit der ersten Ausgabe die 3 angelegten DS, mit der zweiten werden die verdoppelt und mit der dritten sind diese 3DS dreifach ausgegeben.

    Als Ergebnis sollen natürlich nur die DS ausgegeben werden die per Feld "verknuepft" auch die gleiche Zahl eingetragen haben.
    Diese sollen sich auch nicht verdoppeln oder verdreifachen.

    Ich denke ich muss die 3 ursprünglichen Schleifen, in der WHERE-Klausel, noch erweitern mit tbl2.verknuepft! Doch woher kommt der Vergleichswert?
    Wie ich die übergestülpte Schleife dazu bringe nicht mit jedem Durchgang die bereits ausgegebenen DS nochmal auszugeben weis ich auch nicht?

    Hat jemand einen Denkanstoß für mich?

    Gruß Franz

  • #2
    Versuch es mal mit
    SELECT * FROM tbl join tbl2 on tbl.verknuepft=tbl2.verknuepft WHERE...
    So kriegst du nur die Datensätze verknüpft, bei denen die Werte in verknuepft gleich sind.
    Dann musst du die 3 Abfragen zu einer zusammenziehen!
    Mach das erstmal, indem du sie mit dem Wort UNION aneinanderhängst.
    SELECT * FROM tbl join tbl2 on tbl.verknuepft=tbl2.verknuepft WHERE...
    UNION SELECT * FROM tbl join tbl2 on tbl.verknuepft=tbl2.verknuepft WHERE...
    UNION SELECT * FROM tbl join tbl2 on tbl.verknuepft=tbl2.verknuepft WHERE...

    Dass die Ergebnisse dreifach sind, liegt wohl dran dass du in tbl und tbl2 und tbl3 die gleichen Werte eingetragen hast, sodass du die Ergebnisse nicht auseinander halten kannst!
    In wirklichkeit sind es aber unterschiedliche Ergebnisse! Das erste ist eben aus tbl und tbl2, das vierte (gleich aussehend) ist aus tbl2 und tbl3.
    In einem Anwendungsfall hättest du da sicherlich nie die gleichen Daten drin!


    ----
    ups, hab grade erst das Datum gesehen^^

    Comment


    • #3
      Originally posted by CLL View Post
      ----
      ups, hab grade erst das Datum gesehen^^
      Kein Problem!
      Konnte die Abfrage zwar zwischenzeitlich lösen, weis allerdings inzwischen nicht mehr wie, doch neue Denkanstöße sind immer erwünscht.

      Gruß Franz

      Comment

      Working...
      X