Doppeltes Ergebnis nur einmal ausgeben?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Doppeltes Ergebnis nur einmal ausgeben?

    Hallo,

    ich brauch ein wenig Hilfe von den Datenbankexperten ;)
    Ich habe zum Einen folgende Tabelle:
    [Blockierte Grafik: http://www.mirrortheworld.de/Unbenannt.JPG]

    Wenn ich nun eine Abfrage starte und alle Datensätze abfrage, bei denen der "counter" <= 2020 ist (mehr ist momentan nicht in der Tabelle drin), habe ich in diesem Fall z.B. 2 Datensätze, bei denen subject_ID und topic_ID identisch sind. Das Ausgeben des jeweiligen subjects und topics aus deren Tabellen ist kein Probelm, das funktioniert, aber da die doppelt vorkommen in dieser Tabelle, krieg ich es auch zwei mal ausgegeben.

    Also so:
    Mathematik - Analysis
    Mathematik - Analysis

    Ich möchte es aber so haben, das es nur einmal ausgegebn wird.

    Momentan sieht die Ausgabe so aus:
    Mathematik - Analysis
    Mathematik - Analysis
    Englisch - Vokabeln

    und ich hätte es gerne so:
    Mathematik - Analysis
    Englisch - Vokabeln

    Wie kriege ich das hin??

    Vielen Dank

    Matthias
    "Ich bin wie Wein und werde im Alter immer besser." (Greg Foster)
  • Hey X-Eon!

    mit DISTINCT funktioniert es so wie ich es will. Meine Abfrage sieht so aus: (und es klappt) ;)

    Quellcode

    1. SELECT DISTINCT topic,
    2. subject,
    3. topic_ID,
    4. subject_ID
    5. FROM sets_test,
    6. topics,
    7. subjects
    8. WHERE sets_test.topic_ID = topics.ID
    9. AND sets_test.subject_ID = subjects.ID
    10. AND sets_test.user_ID = '".$_SESSION['userid']."'
    11. AND sets_test.counter <= '2008'
    Alles anzeigen
    "Ich bin wie Wein und werde im Alter immer besser." (Greg Foster)
  • Du solltest dir unbedingt mal Literatur zu JOINs anschauen.
    CROSS JOINs (die per Komma) braucht man sogut wie nie und sind total inperformant.

    Ein normaler JOIN sieht so aus - je nach Tabellendesign ist sogar ein NATURAL JOIN möglich.

    Quellcode

    1. SELECT topic,
    2. subject,
    3. topic_ID,
    4. subject_ID
    5. FROM sets_test
    6. JOIN topics
    7. ON sets_test.topic_ID = topics.ID
    8. JOIN subjects
    9. ON sets_test.subject_ID = subjects.ID
    10. WHERE sets_test.user_ID = '".$_SESSION['userid']."'
    11. AND sets_test.counter <= '2008'
    Alles anzeigen
  • d0nut schrieb:

    Du solltest dir unbedingt mal Literatur zu JOINs anschauen.
    CROSS JOINs (die per Komma) braucht man sogut wie nie und sind total inperformant.

    Ein normaler JOIN sieht so aus - je nach Tabellendesign ist sogar ein NATURAL JOIN möglich.

    Quellcode

    1. SELECT topic,
    2. subject,
    3. topic_ID,
    4. subject_ID
    5. FROM sets_test
    6. JOIN topics
    7. ON sets_test.topic_ID = topics.ID
    8. JOIN subjects
    9. ON sets_test.subject_ID = subjects.ID
    10. WHERE sets_test.user_ID = '".$_SESSION['userid']."'
    11. AND sets_test.counter <= '2008'
    Alles anzeigen

    Die Schreibweise ist für die Perfomance nicht wichtig, man kann auch mit der Kommanotation andere Joins hinbekommen. Es gibt auch das Schlüsselwort 'cross join' mit dem man mit der "modernen" Schreibweise Crossjoins machen kann, letzendlich weiß man sowieso nicht genau, was der Queryoptimizer daraus macht. Aber allgemein haste natürlich recht, ein kluger Join ist in den meisten Fällen besser als das Kreuzprodukt zu bilden und rauszufiltern.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]