Hallo zusammen,
der Bedarf für diese Abfrage ergibt sich z.B. beim Ausmisten des Bildbestands:
Wenn ich - auf welche Methode auch immer, Bilder markiert habe, die ich (mitsamt aller zugehörigen Varianten, d.h. jeweils die komplette Gruppe) löschen möchte, muss die Markierung einzelner Gruppenmitglieder auf jeweils die kompletten Bildgruppen übertragen werden.
Fast noch wichtiger ist diese Anwendung beim nachträglichen Verschlagworten des gruppierten Bildbestands:
Vorselektion per Standardabfrage. Im Leuchtpult (Anzeige nur der Gruppenbilder) schnell durgeklickt und per Rechtsklick die jeweiligen Bilder markiert, für die dann via "Markierung - Bearbeiten - Beschriften" ein oder mehrere gemeinsame Kriterien eingetragen werden sollen. Vor dem Aufruf des Beschriftungsdialogs möchte ich mit dieser Abfrage, die Markierung auf alle zugehörigen Gruppenmitglieder übertragen, damit die geänderte Beschriftung bei allen Gruppenmitgliedern ankommt.
Da in Query eine bestehende Markierung nicht Grundlage der Abfragelogik sein kann (Query verändert während der Abfrage ja selbst die Markierung), wird der übliche Umweg via Dummy-Schlagwort gewählt.
Also zunächst die markierten Bilder mit dem Dummyschlagwort (z.B. "_Dummy") beschriften.
Im nächsten Schritt wird dann die unten vorgestellte Abfrage via Query mit dem Parameter ($1) "_Dummy" aufgerufen.
Will man evtl. angewählte Einzelbilder (die also keiner Bildgruppe zugehören) auch markiert lassen, so kann man einfach im Reiter "Ausführen" die Box "Bestehende Markierung beibehalten" anklicken. Andernfalls würden von der Abfrage Einzelbilder ignoriert. (vielleicht hat ja jemand Lust, die Abfrage entsprechend zu ergänzen ... das ist sicher nicht schwierig, nur hab ich im Moment dazu keine Zeit).
Im Ergebnis sind dann die angewählten Bildgruppen komplett (und ggf vorher bereits markierte Einzelbilder) markiert.
Nach der vorgesehenen "Behandlung" dieser Auswahl, kann das Dummy-Schlagwort dann wieder aus dem Schlagwortbaum entfernt werden.
Hier nun also die Abfrage für Query:
Bezeichnung: Alle Gruppenmitglieder zu Schlagwort
Beschreibung: Alle Gruppenmitglieder zu den Bildern mit dem Schlagwort $1
SQL:
select BildID from bild where
BildID in
(SELECT b.ID from bild b where
b.idgruppe in
(select b1.IDgruppe from bild b1, bild_wort bw, schlagwort c where
b1.ID=bw.idbild and bw.idwort=c.id and c.wort='$1'))
Erklärung:
Ich fang mal von Hinten an:
Der blau markierte Teil liefert eine Liste der Bildgruppennummern (IDGruppe) aller Bilder mit dem Schlagwort '$1'. Hierzu werden die Tabellen "bild", "bild_wort" und "schlagwort" benötigt. Weitere Details siehe Pixafe-Datenmodell.
Aus der Liste aller Bilder werden nun im grün markierten Teil alle diejenigen herausgesucht, deren Bildgruppennummer (IDGruppe) in der eben im blau markierten Teil der Abfrage erzeugten Liste auftaucht.
Weil aber ja alle Bilder nochmals durchsucht werden sollen, muss die Datentabelle "bild" ein zweites mal geöffnet werden (eine 2. Instanz, die folglich einen anderen Namen tragen muss, in diesem Fall "b", während die zur Schlagwortabfrage verwendete Instanz den Namen "b1" trägt).
Der Rest der Abfrage ist der ganz normale Standardbeginn jeder Query-Abfrage.
Ich hoffe, ich habe hier keinen allzugroßen Müll erzählt und die Erklärung ist halbwegs richtig und nachvollziehbar. Jedenfalls funktioniert das Ding bisher recht ordentlich.
Viel Spaß damit :)
Gruß
Jürgen