skyposter: Einträge ohne Zuordnung

Hi!

Ich habe zwei Tabellen, von denen eine den Einträgen der anderen Tags zuordnet.
Die einträge, die ein bestimmtes Tag haben bekomme ich problemlos:

SELECT a.id FROM daten' AS a JOIN tags AS b WHERE a.id=b.data AND b.tag`="irgendwas"

Jetzt suche ich aber alle Einträge in data, die KEINE Tags haben. Wie kann ich das abfregen?

Skyposter

  1. Hi!

    abend!

    SELECT a.id FROM daten' AS a JOIN tags AS b WHERE a.id=b.data AND b.tag="irgendwas" Jetzt suche ich aber alle Einträge in data`, die KEINE Tags haben. Wie kann ich das abfregen?

    einfach verneinen statt = einfach != oder tag = '' ;)

    lg,
    der-daniel

    1. Ich suche nicht die Einträge mit anderen Tags, sondern die Einträge, zu denen es garkeine zugehörigen Tags gibt.

      Den SQL-String habe ich mehr zur Verdeutlichung des Aufbaus der Datenbank, als als Ansatz eingefügt.

      Sky

      1. lies alle ids der tabelle a aus, dann alle ids die einen tag haben.
        (hast du ja beides schon)
        so, dann bildest du einfach die schnittmenge und somit bleiben alle übrig, die keine tags haben...

        hilfreich: arra_diff, array_intersect, ...
        PHP-Referenz

        dlg,
        der-daniel

  2. Hello,

    Ich habe zwei Tabellen, von denen eine den Einträgen der anderen Tags zuordnet.
    Die einträge, die ein bestimmtes Tag haben bekomme ich problemlos:

    SELECT a.id FROM daten' AS a JOIN tags AS b WHERE a.id=b.data AND b.tag`="irgendwas"

    Jetzt suche ich aber alle Einträge in data, die KEINE Tags haben. Wie kann ich das abfregen?

    Das kann man sich so vorstellen:

    Man sucht zuerst die Datensätze, für die es Treffer gibt:

    select * from TEST where TEST.ID_TEST = VORHANDEN.ID_TEST;
    Das ergibt alle Paarungen von TEST und VORHANDEN, die zusammenpassen.

    Und dann müsste man sagen, dass man gerade das Gegenteil davon haben will:

    TEST ist meine Produkt-Datei...

    select * from TEST
    left join VORHANDEN on (TEST.ID_TEST = VORHANDEN.ID_TEST) where VORHANDEN.ID_VORHANDEN is NULL order by TEST.ID_TEST;

    Der ursprüngliche Tipp stammte von Daniela Koller:
    http://forum.de.selfhtml.org/archiv/2003/2/37323/#m204537
    Ich weiß aber leider im Moment nicht, wie der beim Forumsumzug migriert wurde.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hello,

      der Vollständigkeit halber...

      Der ursprüngliche Tipp stammte von Daniela Koller:>

      http://forum.de.selfhtml.org/archiv/2003/2/37323/#m204537

      Habe von Daniela schon lange nichts mehr gelesen.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

  3. Ich habe die Lösung gefunden:

    SELECT a.id
    FROM daten AS a
    LEFT JOIN tags AS b ON a.id = b.data
    WHERE b.id IS NULL

    Skyposter