Brauche mal nen Denkanstoss für nen SQL-Query

Mordor

Registered User
Hallo zusammen,
ich habe ein kleines Problem mit einem SQL-Query, bzw. komme nicht ganz drauf wie ich es bewerkstelligen kann, dass ich auf das richtige Ergebniss komme:

Ich habe zwei Tabellen, eine mit dem Namen categories, einem mit dem Namen items. die Tabellen categories ist über ihre id mit dem Feld cat_id der Tabelle items verbunden. Die Tabellen stehen in einer 1-n Verbindung, mehrere Zeilen aus der Tabelle items gehören zu einer Zeile der Tabelle categories.

Ich möchte jetzt eine Abfrage erstellen, in welcher ich eine komplette Zeile aus der Tabelle categories bekomme und gleichzeitig eine zugehörige Zeile aus der Tabelle items. Alle Anfragen die ich bis jetzt geschrieben habe liefern mir aber immer alle Ergebnisse aus der Tabelle items mit.
Bis jetzt habe ich es mit Abfragen mit JOINS probiert. Das ERgebniss sollte dann so aussehen:

|cat.title | cat.id | item.title
---------------------------------
|cat1 | 1 | item1 von cat1
---------------------------------
|cat2 | 2 | item1 von cat 2

Vielleicht weiß ja jemand einen Rat.

Danke schon mal

Gruß Mordor
 
Wäre vieleicht ein JOIN kombiniert mit LIMIT 1 möglich? Oder soll immer das item 1 (=> niedrigest id?) angezeigt werden?
 
Das Problem mit dem LIMIT 1 ist ja, dass er mir dann nur eine Zeile ausgbit. Ich will aber alle Kategorien mit dem immer ersten item der Kategorie haben.
 
Anscheinend wird sich das nur mit einem SubQuery lösen lassen. Im Moment sieht das ganze so aus:
Code:
SELECT a.title AS title, b.title AS firstitem, b.content AS content FROM categories AS a LEFT JOIN items AS b ON a.id = b.cat_id && b.id = (SELECT c.id FROM items AS c WHERE c.cat_id = a.id LIMIT 1)

Ich stelle mir gerade nur die Frage, ob es da noch eine intelligentere und performantere Vorgehenseweise gibt.
 
Das ganze liesse sich als Prepared-Statement benutzen dann entfaellt das Parsen und umwandeln des Kommandos was den Overhead verringert.
 
Das wäre ne Idee. Hab jedoch noch nie was mit prepared Procedures zu tun gehabt. Muss mich glaub ich da mal einlesen.
 
Back
Top