Jackery IFA Fireplace

SQL Aggregatfuntkion MAX mehrfach: Ergebnisproblem

raffiSSL

Lt. Junior Grade
Registriert
Feb. 2006
Beiträge
289
Hallo,
leider ist mir kein passenderer Titel eingefallen. Ich versuche mein Problem mal allgemein zu erklären:
Ich habe eine Abfrage nach dem folgenden Schema:
Code:
select
   nr1.nid as AZNID, nr1.body as AZBemerkung, caz.field_beginn_value as AZBeginn, caz.field_ende_value as AZEnde,
   max(nr1.vid) as AZVersion,
   nr2.body as Vorgangsname, nr2.nid as VorgangsNID, max(nr2.vid) as Vorgangsversion,
   n3.title as KatID, max(ca.vid) as KatVID
from
   node_revisions nr1, node n1, content_type_arbeitszeit caz,
   node_revisions nr2, node n2, node n3, content_type_auftrag ca
where
   nr1.vid = n1.vid and nr1.vid = caz.vid and
   nr2.nid = caz.field_auftrag_nid and
   n1.type = 'arbeitszeit' and n2.type = 'auftrag' and 
   n3.nid = ca.field_auftragskategorie_nid and n3.type = 'kategorie'
group by
   AZNID

Mein Problem ist, das der erste Teil der Abfrage (AZxxxx) das richtige aktuellste Ergebnis liefert. Aktuell, weil die vid die VersionsID darstellt. Nun möchte ich aber für die anderen beiden Teile (Vorgang und Kat) ebenfalls nur die aktuellsten Versionen haben. Sobald ich weitere Spalten unter group by aufführe, wächst die Tabelle.
Ergbnis sollte wörtlich gesprochen sein: Aktuellste Version einer Arbeitszeit inklusive deren Vorgang und dessen Kategorie ebenfalls in jeweils der aktuellsten Version.
Kann ich diese Forderung so in einer Abfrage lösen?
Für evtl. Insider, es handelt sich um das Drupal-DB Schema, ich muss also sozusagen mit den Tabellen bzw. Spalten in dieser Form arbeiten!

Hoffe das Problem ist klar geworden.
Danke
 
Zuletzt bearbeitet:
Hallo,
ich denke, dass du für jede Aggregation eine Abfragen benötigst.

Code:
select nid, max(vid) from node_revisions where ... group by nid 
select nid, max(vid) from node_revisions where ... group by nid
select a.title, max(b.vid) from node a, content_type_auftrag b where ... group by a.title

Diese drei Abfragen kannst du eventuell schachteln (Sub-Queries), wenn du nur eine Ergebnistabelle benötigst.

MfG,
Frank
 
Für evtl. Insider, es handelt sich um das Drupal-DB Schema, ich muss also sozusagen mit den Tabellen bzw. Spalten in dieser Form arbeiten!
Darf ich fragen, warum du nicht einfach node_load(nid) aufrufst und dann die restlichen Werte aus deinen Tabellen lädst?
 
Hallo,
diese Funktion war mir gänzlich unbekannt. Danke für den Hinweis, werde mal versuchen, ob ich es damit besser umsetzen kann.
Das gewünschte Ergebnis hatte ich übrigens schon, allerdings umgesetzt mit 3 getrennten Abfragen. Zu Lernzwecken hat mich einfach interessiert, ob dies nich generell in einer Abfrage zu meistern wäre.
Werde mir noad_load mal zu Gemüte führen.

Danke :)
 
Zurück
Oben