Ilja: Brauche Hilfe: Komplizierte MYSQL-Abfrage

Beitrag lesen

moin,

ich arbeite seit ungelogen 3-4 Stunden daran eine Abfrage zu schreiben, die mir einfach nicht gelingen will.

Vinzenz hat dir schon den richtigen hinweis gegeben, ich will ihn noch ein wenig ergänzen. ein motto von mir ist: "joins sind böse". natürlich sind sie das nicht wirklich, aber man sollte das motto verinnerlichen. der grund dafür ist, dass man oftmals nur eine bestimmte anzahl an datensätze in der ergebnismenge haben will (meistens aus einer tabelle wie bei dir die themen), aber in andere tabellen notwende informationen dazu stehen. dann joint man diese und bekommt meistens dann eine andere anzahl von datensätze zurück.

deshalb verfolge ich einen anderen ansatz, ich suche mir als ertes die basis der datensätze, die ich zurück haben will, also bei dir die themen tabelle, die du dann über den timestamp sortieren kannst.

SELECT *
FROM Themen
ORDER BY posttime
;

nun stimmt schon mal deine ergebnismenge und sind auch schon fast am ziel. wir müssen nur noch die themen selektieren, wo der user mit der id = 1 auch beträge geschrieben hat. und das macht man am besten mit der von Vinzen angesprochenen korrelierten unterabfrage in verbindung mit einem schönen operator EXITS.

SELECT *
FROM Themen t
WHERE EXISTS (SELECT NULL
              FROM beiträge b -- du solltest das ä im tabellennamen vermeiden
              WHERE b.themenid = t.themenid -- hier ist die korrelation
              AND b.userid = 1
             )
ORDER BY posttime
;

und das sollte alles sein.

Ilja