ich brauch Eure Hilfe - allein komm ich da nicht weiter ...
Ausgangssituation: Einige Bilder sind markiert. Ziel: Zu diesen Bildern möchte ich nun die jeweiligen Gruppenbilder (als Varianten dann später: alle Gruppenmitglieder, oder alle Gruppenmitglieder eines bestimmten Dateityps) markieren. Problem: Ich schätze mal, ich laufe da in so eine Art Rekursion rein, da ja ein Teil der Abfragekriterien die Markierung von Bildern ist, aber auch die Abfrage selbst weitere Bilder markiert ... Hier mein Ansatz für die einfachste der o.g. Aufgaben (Auswahl der Gruppenbilder):
select BildID from bild where BildID in (select IDGruppe from bild where marked=1)
Was mach ich falsch? Oder geht das wegen der Rekursion tatsächlich nicht so einfach?
ein Hinweis vorab: marked wird nicht mehr verwendet, denn mit Version 7 sind nicht die Bilder markiert, sondern es wurde eine Relation eingeführt, die besagt welche Bilder im Kontext welches Benutzers markiert sind. Du hast doch das Datenmodell, dort sollte das beschrieben sein. Es gibt eine Zuordnungstabelle Benutzer-Markierung, in der die Bild-IDs stehen, die eben für diesen Benutzer markiert sind. Statt marked verwende die Zuordnungstabelle und als User ID den zurrend user
Hi Peter, aha - ich wusste doch, da geht was schief ... war wohl zu spät gestern Abend :) Ich werd mich nochmal frisch dranmachen und berichte dann hier ... Vielen Dank für den Tip! Gruß Jürgen
Der Grund ist klar: pixafe Query arbeitet so, dass das Ergebnis der beliebig formulierbaren Abfrage im Kontext des aktuellen Benutzers markiert wird. Du findest die Ergebnismenge einer pixafe-Query Abfrage hinterher in pixafe als markierte Bilder.
pixafe Query bietet die Möglichkeit, bestehende Markierungen beizubehalten, d.h. wenn du in der ersten Query A Bilder findest und du in einer zweiten Query B weitere Bilder findest, kannst du in pixafe Query den Schalter 'bestehende Markierungen beibehalten' anklicken sodass du nach der zweiten Abfrage die Markierungen der ersten Abfrage nicht entfernst.
Bei der von dir gewünschten Abfrage sind nun eine Menge Bilder markiert, darunter eine Teilmenge, die eben die Gruppenbilder sind. Du möchtest also die bestehenden Markierungen entfernen und als Ergebnis die Menge der markierten Gruppenbilder erhalten. Das ginge theoretisch so:
select BildID from bild where BildID in ( -- markierte Bilder des Benutzers angegeben über Paramter $1 select idbild from markierung m, user u, bild b where m.iduser=u.id and u.login='$1' -- Gruppenbilder and idbild=b.idgruppe and idbild=b.id )
Ich schreibe bewusst theoretisch, denn wenn pixafe Query die Abfrage ausführt, werden zunächst alle Markierungen entfernt und nichts gefunden. Oder wenn du den Schalter 'bestehende Markierungen beibehalten' wählst dann bleibt die Menge der Markierungen wie zuvor und du hast die Gruppenbilder nicht rausselektiert.
Schade eigentlich... Schöne Grüße Alex
--- Alexander Ramisch mailto:info@pixafe.com pixafe GbR http://www.pixafe.com pixafe - die Bilderdatenbank Elisabeth Jost Straße 6 , D-81245 Muenchen Tel +49 89 87589575 Fax +49 89 15919775
Danke für die Erklärung - so ähnlich hatte ich das befürchtet (siehe mein Hinweis á la "Rekursion") - und ja, es ist wirklich sehr schade!
O.k. aber das kanns ja trotzdem noch nicht gewesen sein ...:
Alternative 1: Gäbe es denn einen Umweg über einen "Dummy-User"? Also sozusagen eine zweite Markierungs-Ebene einführen. Da würde nur noch eine Möglichkeit fehlen, die Markierungen eines Users via Query (oder eines per Query aufrufbaren Kommandos (Makro?)) auf einen anderen User zu übertragen ...
Alternative 2: Ich wünsch mir diese Abfragen rund um die Gruppenselektion ganz fest und ausdrücklich im Forum und versuche möglichst viele Mitstreiter dafür zu mobilisieren ... dann kannst Du ja kaum mehr anders, als das in der nächsten Version als Standardfunktion einzubauen ;))
... Übrigens habe ich rund um die Beschriftung von Bildgruppen noch ein paar weitere Wünsche (schonmal direkt per e-Mail an Dich adressiert), die vielleicht in den gleichen Topf passen ...
ich möchte verstehen, warum genau diese Query: Du hast Bilder markiert und möchtest nun deren Gruppenbilder finden, richtig? Zu einem beliebigen Bild, das Teil einer Gruppe ist, kannst du ja mittels Bild-Suche-Aktuelle Gruppe die Bilder anzeigen lassen die zu der Gruppe gehören. Und das Gruppenbild erkennst du dann an dem grünen Icon wohingegen die normalen Gruppenmitglieder (die Bilder die versteckt werden) ein weisses Icon haben. So kommst du zumindest Bild für Bild an das gewünschte Ergebnise, oder?
Hallo Peter, also - erstmal nur in aller Eile - muss nämlich gleich weg ... Ich habe üblicherweise in jeder Bildgruppe ein RAW (mit sidecars), und mehrere JPGs, ggf. dann auch noch ein PSD zusammengefasst. Aufgrund verschiedener Ursachen ist nun in der Regel die Beschriftung der einzelnen Bilder innerhalb der Gruppe nicht 100% konsistent. So kommt es z.B. dazu, dass ich zwar ein Gruppenmitglied finde, aber eigentlich möchte ich das Gruppenbild (i.d.R. das top-entwickelte JPG) haben. Soweit das nur einzelne Bilder sind, mach ich das genau so, wie du es beschreibst. Wenn ich nun aber z.B. die Favoriten aus den Schweden-Urlauben der letzten 5 Jahre haben möchte, um diese dann per Sammelauftrag ans Labor zu schicken oder als Dia-Show auf ne DVD zu brennen, wird das unmöglich. Hierzu wünsch ich mir den "Button" statt den markierten Bildern, die jeweiligen Gruppenbilder markieren. Das ist die aktuelle Anwendung für diesen ersten Fall.
Nun zum Fall "Alle Gruppenmitglieder eines bestimmten Dateityps": Anders, wenn ich bestimmte Bilder gefunden habe, die ich nochmals komplett neu überarbeiten möchte. Wieder finde ich per Abfrage eine Mischmenge von Bildern aus den richtigen Gruppen. Ausgehend von diesem Ergebnis möchte ich die Markierung dann auf alle RAWs (oder z.B. auch der PSD-Dateien) der betroffenen Gruppen übertragen, um diese dann im nächsten Schritt mit den bereits vorhandenen Sidecars per externer Software bearbeiten zu können. Auch hier: Einzelbildchen oder auch sehr wenige Pics: No Problem. Grössere Bildermenge: Heute nicht vernünftig machbar.
Der dritte Fall "Alle Bilder der jeweiligen Gruppen" taucht z.B. beim Ausmisten des Bildbestands auf. Wenn ich nun - 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, taucht das gleiche Problem auf. Nur möchte ich diesmal die Markierung einzelner Gruppenmitglieder auf jeweils die kompletten Bildgruppen übertragen. 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 gerne den Wunsch-Button "Beschriftung auf alle Gruppenmitglieder übertragen" klicken, damit das neue Merkmal bei allen Gruppenmitgliedern ankommt.
Hoffe, die Beispiele erscheinen nachvollziehbar - wenn nicht, frag bitte einfach nochmal nach ...
hier mal die erste Lösung: Suche die Gruppenbilder zu markierten Bildern, die sich in Gruppen befinden. Wie bereits geschrieben, geht das nicht mit der Markierung direkt, es muss ein kleiner Umweg genommen werden: Anstelle markierter Bilder verwenden wir einfach Bilder mit einem bestimmten (temporären) Schlagwort. Also Ausgangspunkt ist, dass du Bilder markiert hast, zu denen du die Gruppenbilder brauchst. Dazu gehst du wie folgt vor: 1. Markierungen beschriften, Schlagwort vergeben z.B: "Suche Gruppenbild" Nach diesem Schritt sind all die Bilder, zu denen die Gruppenbilder gesucht werden mit dem Schlagwort "Suche Gruppenbild" beschriftet 2. Ausführen der pixafe Query "Gruppenbilder", die ich hier im Anhang angefügt habe. Die macht folgendes: select BildID from bild where BildID in ( SELECT B.idgruppe FROM bild B, bild_wort BW, schlagwort S WHERE BW.idbild = B.id and BW.idwort = S.id and S.wort ='$1')
Fertig. Bei der Query gibst du einfach als Schlagwort (Parameter $1) eben "Suche Gruppenbilder" ein und hast dann als Ergebnis die Gruppenbilder zu den mit dem Schlagwort beschrifteten Bildern gefunden. Die sind dann nämlich markiert. Das temporär vergebene Schlagwort kannst du einfach löschen - Schlagwort im Wortbaum suchen und entfernen. Damit wird natürlich auch die Zuordnung der Bilder zu dem Schlagwort entfernt. Und du hast hoffentlich was du brauchst...
Schöne Grüße Alex
--- Alexander Ramisch mailto:info@pixafe.com pixafe GbR http://www.pixafe.com pixafe - die Bilderdatenbank Elisabeth Jost Straße 6 , D-81245 Muenchen Tel +49 89 87589575 Fax +49 89 15919775
Super - vielen Dank für die Lösung! Sieht soweit logisch und vernünftig aus. Werde ich in den nächsten Tagen mal testen und dann auch auf die anderen Problemstellungen übertragen - zumindest versuche ich das mal. Irgendwann lerne ich SQL vielleicht doch noch etwas besser kennen :)
habe eben auf die Schnelle mal ein paar Versuche gemacht. Die Abfrage funktioniert perfekt und zwar auch dann, wenn mehrere Vertreter einer Bildgruppe und auch Gruppenbilder markiert und mit dem Dummy-Schlagwort versehen waren. Super - auf diesem Weg komm ich ins Ziel :)
In der nächsten Etappe (vielleicht am kommenden Wochenende) passe ich die Abfrage auf die anderen genannten Aufgabestellungen an und poste die Ergebnisse sobald es funktioniert. Wenn ich Hilfe brauche, melde ich mich. Ich schätze aber, dass ich mit dem Datenmodell und Deiner ersten Vorlage klarkomme.