ich werde immer wieder gefragt nach Datenbankzugriffen, die von der pixafe-Benutzeroberfläche noch nicht möglich sind, aber im Kontext eines Anwenders sinnvoll wären. Beispielsweise die Suche nach Bildern zu bestimmten Schlagworten, die NICHT an einem bestimmten Ort aufgenommen wurden, oder die NICHT von einer bestimmten Kategorie sind.
Hier greift das Datenmodell und die Datenbanksprache SQL. Das pixafe-Datenmodell beschreibt genau, welche Tabellen in der pixafe Datenbank verwaltet werden, wie die einzelnen Spalten heissen und wie man in ganz individueller Weise auf die Datenbank zugreifen kann.
Man muss sich aber bewusst sein, dass es nicht unbedingt trivial ist, mittels SQL auf die Datenbank zuzugreifen, ein wenig Informatik-Know how ist schon sinnvoll.
Nun anbei ein kleines Beispiel um das ganze auch ein wenig schmackhaft zu machen:
Der folgende SQL-Befehl selectiert alle Bilder mit der Kategorie FAVORIT in der Datenbank, auf denen Personen abgebildet sind, die die Vornamen Maja und Elias haben.
select b.id from bild b, bild_person bp1, bild_person bp2, bild_kategorie bk, kategorie k, person p1, person p2 where b.id = bp1.idbild and bp1.idpers = p1.id and p1.vorname = 'Elias' and bp2.idpers = p2.id and p2.vorname = 'Maja' and bp2.idbild = bp1.idbild and bk.idkat = k.id and k.kat='FAVORIT' and bk.idbild = b.id
Diese Bilder werden über den folgenden Befehl markiert:
update bild set marked = 1 where id in ( select b.id from bild b, bild_person bp1, bild_person bp2, bild_kategorie bk, kategorie k, person p1, person p2 where b.id = bp1.idbild and bp1.idpers = p1.id and p1.vorname = 'Elias' and bp2.idpers = p2.id and p2.vorname = 'Maja' and bp2.idbild = bp1.idbild and bk.idkat = k.id and k.kat='FAVORIT' and bk.idbild = b.id );
Wenn Sie den Befehl ausfürhen sind die beschriebenen Bilder markiert, Ihr könnt also anschlißend mit der pixafe Oberfläche nach den markierten Bildern suchen und findet genau die Bilder wie oben beschrieben.
Noch ein Hinweis: SQL-Befehle auf der Kommandozeile einzugeben ist ein wenig mühsam. Ich schreibe diese Befehle in eine ASCII-Datei und führe sie über den Befehl spufi aus. Der spufi-Befehl ist eine Batch-Datei die als Argument die Datei mit dem SQL-Befehl erhält: Spufi.bat enthält also folgendes Kommando: db2 -f %1 -t -l %1.log
Das SQL-Kommando des Beispiels speichert Ihr beispielsweise in der Datei select.txt ab: Wenn Ihr dann spufi select.txt eingebt, werden alle Bilder markiert, die von der Kategori FAVORIT sind und auf denen Maja und Elias abgebildet sind.
Mich würde mal Eure Meinung dazu interessieren.
Grüße Alex
--- Alexander Ramisch mailto:info@pixafe.com pixafe GbR http://www.pixafe.com pixafe - die Bilderdatenbank Erhard Auer Straße 8 , D-80637 Muenchen Tel +49 89 87589575 Fax +49 89 15919775
Alex, damit machst Du mir und den anderen Angst. Das ist was für Profis. Der normale Nutzer versteht das nicht und möchte sich eigentlich nicht damit befassen.
Sehe ich auch so. Ich bin froh, das die Kiste läuft und ich meine falsch eingegebenen Schlagwörter in der Liste bereinigt habe. Jetzt finde ich alles über das grüne Fernglas oder die Baumsuche. Die Sache mit der Datumssuche ist ebenfalls super. Kommandozeilen sind nicht so mein Ding.
mfg trekker Ich bearbeite meine Bilder mit FixFoto, verwalte sie mit Pixafe der Bilderdatenbank und präsentiere sie mit Aquasoft Dia Show XP five
Hier noch ein kleiner Befehl, um alle Bilder zu finden, die noch nicht mit Personen beschriftet sind: unter http://www.pixafe.com/downloads/spufi.zip gibt es die Batch-Datei SPUFI. Einfach entpacken und in den Pfad legen.
Dann die Datei http://www.pixafe.com/downloads/KeinePersonen.zip. Auch diese entpacken und dann folgendes eingeben: db2 connect to picdb user <KENNUNG des PIXAFE ADMINS> using <DESSEN PASSWORT> spufi KeinePersonen.sql
Anschließend sind alle Bilder markiert, die noch nicht mit Personen beschriftet sind. Der Befehl greift aber nur solche ab, die auch gleichzeitig Favoriten sind.
Wenn der gesamte Bildbestand (nicht nur die Favoriten) untersucht werden soll, ist der Befehl (KeinePersonen.sql) abzuändern auf:
update bild set marked = 1 where id in ( select b.id from bild b where not exists ( select * from bild_person bp where bp.idbild=b.id ) );
Das ist doch eine simple Methode, um alle Bilder zu finden, die noch beschriftet werden müssen. Ähnlich einfach wäre es alle Bilder zu finden, die noch mit keinem Ort beschriftet wurden etc.
Grüße Alex
--- Alexander Ramisch mailto:info@pixafe.com pixafe GbR http://www.pixafe.com pixafe - die Bilderdatenbank Erhard Auer Straße 8 , D-80637 Muenchen Tel +49 89 87589575 Fax +49 89 15919775
Hallo Alex, die SQL Abfragen interessieren mich sehr. Ich würde auch gerne die gesamte Datenbank in einer Exceltabelle abgespeichert haben. Ich würde gerne wissen ob ich das jetzt so realisieren kann, oder muss ich mir dafür noch irgendein Tool von pixafe kaufen
dass eine gute Datenbank jegliche Abfragen grundsätzlich ermöglicht, das war für mich bisher eine Selbstverständlichkeit. Allerdings ist ein Anwenderprogramm wie pixafe aus meiner Sicht genau so selbstverständlich dafür da, dass der user keine Datenbankkenntnisse und keine Programmiersprachen beherrschen muss, um die Funktionalitäten der DB zu nutzen.
Deshalb hoffe ich, dass zukünftige Updates u.a. hier mit dem Ziel ansetzten, die Möglichkeiten der Datebank weiter auch für die Anwender zu erschließen, die keine Informatiker sind.
Hallo Joe, da stimme ich zu, der Anwender braucht von Datenbanken nichts zu wissen. Das ist auch heute schon so, über den pixafe-Client kann man quasi alles finden. Nichtsdestotrotz ist die Sprache SQL noch viel mächtiger sodass mit deren Kenntnis weitere Möglichkeiten bestehen. Beispielsweise das Erstellen von Reports oder wie von Nolle gewünscht das Erstellen eines Abbildes in Excel, etc.
Grüße Alex --- Alexander Ramisch mailto:info@pixafe.com pixafe GbR http://www.pixafe.com pixafe - die Bilderdatenbank Erhard Auer Straße 8 , D-80637 Muenchen Tel +49 89 87589575 Fax +49 89 15919775
Kann man das denn nicht in der erweiterten Suche unterbringen? Dann klickt man drauf und das Ergebnis erscheint. Und von der ganzen Kommandozeile kriegt man nichts mit.
Das sehe ich auch so für die gewünschten Suchen nach nicht belegten Autoren, Personen Orten etc. Ich habe das auch schon entsprechend aufgenommen. Für weitere Abfragen, Reports, zur Anbindung beispielsweise an Abrechnungssysteme etc. ist das Wissen über das Datenmodell dennoch nötig. Aber ich sehe es auch so, dass dies im Normalfall nicht benötigt wird.
Grüße Alex --- Alexander Ramisch mailto:info@pixafe.com pixafe GbR http://www.pixafe.com pixafe - die Bilderdatenbank Erhard Auer Straße 8 , D-80637 Muenchen Tel +49 89 87589575 Fax +49 89 15919775
ich möchte gerne Bilder die in einem bestimmten Zeitraum in die Datenbank eingefügt wurden und zu einer bestimmten Kategorie gehören suchen. Mit dem pixafe Client ist da wohl nicht zu machen, oder doch ? Ich habe versucht dein Beispiel mit den sql Befehlen so zu ändern das es meiner Suche entspricht, bin aber immer bei der Eingabe des Datum gescheitert Vielleicht hast du ja noch ein Tipp für mich
die Suche nach Bildern aus einem Zeitraum kombiniert mit einer Kategorie findest du indem du in dem normalen Suchdialog das Bilddatum und die geünschte Kategorie angibst. Also beispielsweise alle Bider der Kategorie Sport im Januar 2003: Angabe im Bilddatum 2003.01 und Eingabe der Kategorie Sport. Wenn du das Einfügedatum mit einer Kategorie kombinieren willst siehts erst mal schlecht aus. Du kannst hier zwar ganz genau den Zeitraum angeben aber noch nicht mit der Kategorie kombinieren. Aber üder die direkte Eingabe von SQL muss es klappen. Wo liegt das Problem bei der Eingabe des Datums?
Grüße Alex
--- Alexander Ramisch mailto:info@pixafe.com pixafe GbR http://www.pixafe.com pixafe - die Bilderdatenbank Erhard Auer Straße 8 , D-80637 Muenchen Tel +49 89 87589575 Fax +49 89 15919775
um z.B. die Bilder, die Du seit Anfang April diesen Jahres in pixafe eingefügt hast, zu markieren, kannst Du z.B. mal folgendes absetzen:
update bild set marked = 1 where id in ( select id from bild where date(inserted)>'2007-03-31' );
Analog kannst Du natürlich eine "Datum von-bis" Abfrage bzw. Markierung realisieren: z.B.: update bild set marked = 1 where id in ( select id from bild where date(inserted)>'2007-03-31' and date(inserted)<'2007-04-12' );