Vinzenz Mai: MySQL -> Nur Datensätze wo kein Eintrag

Beitrag lesen

Hallo,

leider hat unser Programmierer urlaub und ich habe den Auftrag bekommen per PHP MYAdmin alle Artikel ID´s zu finden, die noch keine Kommentare haben.

Hierzu muss ich die zwei Tabellen (Tabelle A = "kommentar"; Tabelle B ="daten") per INNER JOIN verbinden.

Nein. Eben nicht. Wenn es noch keine Kommentare gibt, benötigst Du einen OUTER JOIN. Du könntest auch ein Subselect nehmen.

Ich glaube da hört mein Latein einfach auf.

Wie wär's mit SQL statt Latein?

SELECT a.autor, a.inhalt, a.voting, b.bezeichnung, b.ort, b.id, b.kreis

  								FROM kommentar AS a  
  								INNER JOIN daten AS b ON ( a.artikel_id = b.id )  
  								WHERE a.spam = '0'  
  								AND a.freigeschaltet = '0'  
  								ORDER BY a.datum DESC  
  								LIMIT 7
  
Du möchtest die ID-Werte aus der Tabelle daten haben, für die es keine entsprechung in der Tabelle kommentar gibt, am einfachsten ist dies 1:1 mit einem Subselect umzusetzen:  
  
~~~sql
SELECT                     -- Gib mir  
    id                     -- die id-Werte  
FROM                       -- aus der Tabelle  
    daten                  -- daten,  
WHERE                      -- wobei mich nur die Datensätze interessieren,  
    id NOT IN (            -- deren id nicht in der Liste  
        SELECT  
            artikel_id     -- der Artikel-IDs  
        FROM               -- aus der Tabelle  
            kommentare     -- kommentare  
    )                      -- vorkommen  

Anmerkung:
Wenn Du noch weitere Informationen aus der Tabelle daten benötigst, frage diese mit ab. Da es noch keinen zugehörigen Eintrag in der Tabelle kommentare gibt, ist es nicht sinnvoll, Spalten aus der Tabelle kommentare abzufragen.

Hinweis: Aliasnamen sind oftmals sinnvoll, jedoch sollte man die Namen *sinnvoll* wählen. a und b sind keine sinnvollen Aliasnamen für "daten" und "kommentare".

Freundliche Grüße

Vinzenz