Verständnisfrage DAL-Aggregration auf Resultset-Zeilenebene

Hallo,

leider sind bislang alle meine Versuche eine Aggregation für die Zeilen eines Abfragegergebnisses hinzubekommen gescheitert. Gibt es die Möglichkeit wirklich nicht, oder sehe ich einfach nicht, wie es geht?

Folgende Abfrage als Beispiel. Das ist nicht unser Anwendungsfall, sondern dient lediglich der Veranschaulichung.

Auf das Beispiel bezogen hätte ich gerne die Anzahl der Medien, die zu einem Ordner gehören, und zusätzlich die Anzahl mit einer Größe < 10000. Limit 2/2 steht für eine Paginierung.

select count(m.id) as totalmedia,
sum(IF(m.file_size < 10000,1,0)) as smallmedia,
mf.*
from media_folder mf
left join media m on m.media_folder_id = mf.id
group by mf.id
order by mf.id
limit 2,2

Das als Ergebnis in die zurückgelieferten Entitys zu bekommen ist m.E. nicht möglich, und vermutlich auch so beabsichtigt?

Parallel als Aggregation und Zugriff über die Bucket-ID funktioniert aber leider auch nicht.
Aus 2 Gründen:

  • Die Terms-Aggregation unterstützt zwar ein Limit, aber kein Offset, es ist also nicht möglich das gleiche Resultset zu selektieren
  • Die Filter-Aggregation

$fa = new FilterAggregation(„smallmedia_fa“, new TermsAggregation(„smallmedia_ta“, „media_folder.id“, 2 , new FieldSorting(„media_folder.id“,„ASC“)),
[new RangeFilter(„media.fileSize“,[„lt“ => 10000])]
);

funktioniert nur für Ordner, denen mindestens ein Medium zugeordnet ist, lässt also ebenfalls keine Selektierung des Resultsets zu, auch ohne Paginierung.

Es gelingt mir demzufolge weder eine Aggregation nur über die Ergebnisse der Query zu machen, noch eine Gruppierung pro Ergebnis.

Ich vermute, ich sehe den richtigen Weg nicht?