Zeitleiste im Explorer

  • Hallo


    Die Möglichkeiten, im Explorer durch die imabas.xml eigene Erweiterungen einzubauen sind wirklich sehr gut. Unten habe ich einmal ein Beispiel integriert, welches eine Zeitleiste mit Hierarchie Jahr/Monat/Tag beinhaltet.


    Die Selects basieren auf Firebird 2.0 mit aktiviertem UDF-Support.


    Zur Darstellung habe ich noch eine Frage:
    Welche Bilder stecken hinter den Nummern, kann man irgendwo eine Liste einsehen, oder musss man einfach alle Nummern durchprobieren?


    mfG
    Wolfgang


    -- -------- schnipp schnapp ---------------------------

  • Hallo Wolfgang,
    sieht Interessant aus :-)


    Habe aber den MONAT mal umgestellt, da waren kleine Fehler drin:

    Code
    1. <query mode="macro">
    2. select substr(makedate,1,4) jahr, substr(makedate,1,6) jahrmonat, substr(makedate,5,2) monat, count(*) anz
    3. from bilder
    4. where substr(makedate,1,4)='${parent.jahr}'
    5. group by substr(makedate,1,6)
    6. </query>

    Sieht danach aus besser aus :oops:


    Man muss u.U. nur an die Performance denken, bei meiner Testdatenbank mit ber 60.000 Bilder braucht der zum ersten Öffnen ca. 10 Sekunden, danach fluppt das. Auf dem MySQL-Server auch wenn die Anwendung neu gestartet wird, da der Datenbank-Cache erhalten bleibt...

  • Hallo


    Auf einer Firebird läuft der Original-Select. Dort ist das 3. Argument bei substr die Position, keine Länge. Der Monat steht an Position 5-6. Die bei Oracle verwendete Semantik (3. Argument=Länge) steckt bei Firebird in der Funktion substrlen :-(. Das ist halt das einzige Problem bei derartigen SQL-Lösungen, man muss die Dialekte berücksichtigen. Das ganze funktioniert im übrigen auch mit der embedded Datenbank :-).


    Performance:
    Ja, da der Komplettbestand durchgeorgelt werden muss(full-table-scan und wegen substr wahrscheinlich ohne Index), dauert es etwas - aber ich finde, dass der daraus resultierende Komfort durchaus nicht unbeträchtlich ist. Selbst meine kleine Testmenge brachte überraschende Verteilungen :-)


    Sollte man das häufiger brauchen, könnte man entsprechende, Funktion-based Indexe anlegen oder für die erste Stufe des Selectes mit einer Pivot-Tabelle arbeiten und die inneren Knoten mittels WHERE-Bedingungen besser einschränken (WHERE mit < und > bzgl des Datums). Da können dann entsprechende einfache Indexe helfen:a015:.

  • Great Job!

    ich finde die Zeitleiste super.
    Kai, kannst du das eventuell in die nächste Version als Standard aufnehmen?

  • Kai, kannst du das eventuell in die nächste Version als Standard aufnehmen?


    Würde ich gerne, aber sorry, da diese blöde SUBSTR-Funktion nicht einheitlich auf den SQL-Servern ist, würde ich mir recht viel Probleme einfangen.


    Ich habe aber eine Firebird-Komaptible Version in das Benutzerabfragen-Board gelegt. Vielleicht erweiterst du das um eine SQL2000-Variante?

  • Hallo Wolfgang,
    Klasse und mit der Änderung von Kai, erstklassige Arbeit. Läuft auch so mit MySQL-Datenbank 5.0

    :h050:

    Gruß
    Helmut

  • Hallo,
    nicht schlecht die Zeitleiste!


    ( Also ich hab da noch so 'ne Idee :oops:, also genau genommen schon 'ne etwas aufgebohrte Variante in meinem Explorer, aber ich habe die Befürchtung wenn ich damit komme, steh ich hier als Miesmacher da ... )

  • Hallo


    Ich bin leider noch nicht dazu gekommen, die 7er-Version zu installieren. Aber es hat ja schon erfolgreiche Versuche gegeben.:c090:


    Holger: Ich habe übrigends nichts dagegen, wenn andere modifizierte Versionen eingestellt werden. :nicken:


    CU Wolfgang


  • Holger: Ich habe übrigends nichts dagegen, wenn andere modifizierte Versionen eingestellt werden. :nicken:


    Also bei mir gibts unter dem Monat erst noch mal Wochen und dann die Wochentage mit Datum. Aber leider alles sehr auf MySQL zugeschnitten und mit 2 extra DB-Tabellen damit ich Monatsnamen und Wochentage auch schön lesen kann :oops:.
    Ich bereite des Dingens mal etwas auf... und packs dann hier rein.



    Ich bin leider noch nicht dazu gekommen, die 7er-Version zu installieren.


    Ich lass auch erst mal die BUG-Welle vorbei ... :e010:

  • Aber leider alles sehr auf MySQL zugeschnitten und mit 2 extra DB-Tabellen damit ich Monatsnamen und Wochentage auch schön lesen kann :oops:.
    Ich bereite des Dingens mal etwas auf... und packs dann hier rein.


    Ähm - wäre das dann nicht ein Job für Kai als feste Implantierung? Stell Dir mal vor, er ändert wieder die Datenbankstruktur! :e030:


    Ich lass auch erst mal die BUG-Welle vorbei ... :e010:


    Dass ist aber eine kleine Bugwelle. Nur Mut!!!!

  • Hallo!


    Für alle, die sich genau so wenig mit SQL auskennen wie ich, ist der folgende Hinweis vielleicht nützlich.
    Ausgehend von diesem Thread hatte ich versucht, die Zeitleiste zu installieren. Jeder Versuch, das Skript in der Datei Imabas.xml zum Anzeigen der Zeitleiste zu bewegen, scheiterte. Schließlich traute ich mich, die Datei Explorer.xml zu benutzen - siehe da, es klappt.
    In der Antwort #9 des o.g. Threads taucht die Imabas.xml auf - und das sorgte bei mir für Verwirrung.
    Aber nun läuft's ja :smile2:!


    Sollte dieser Hinweis überflüssig oder deplaziert sein - einfach mal löschen!


    Gruß
    Roland

  • Hallo Roland,


    In der Antwort #9 des o.g. Threads taucht fälschlicher weise die Imabas.xml auf - und das sorgte bei mir für Verwirrung.


    :e045: also bis zur Version 6.5, gab es noch keine explorer.xml . Die gibt es erst ab der 7er von Imabas (Betas ausgeschlossen). Daher ist das mit der imabas.xml nicht wirklich falsch, aber mit der Zeit eine etwas individuellere Variante. :schein:

  • hab doch keine Zeit gefunden, zu prüfen ob hier alles selbsterklaerend bezeichnet ist.
    deshalb, einfach ohne einen weiteren Kommentar:

    Code
    1. <!-- ********************************************** --> <!-- *** Chronologie *** --> <!-- ********************************************** --> <node update="1" image="164"> <caption lang="de">Chronologie</caption> <caption lang="en">Chronology</caption> <items id="year" image="165"> <query> SELECT makedate AS ukey, YEAR(makedate) AS jahr, COUNT(*) as anzahl FROM bilder WHERE makedate &lt;&gt; '00000000' GROUP BY YEAR(makedate) </query> <images func="sql" mode="macro"> SELECT * FROM bilder WHERE LEFT(makedate,4) = LEFT('${this.ukey}',4) </images> <caption mode="macro">${this.jahr} [${this.anzahl}]</caption> <sort mode="macro">${this.jahr}</sort> <items id="month" image="164"> <query mode="macro"> SELECT makedate AS ukey, hk_monate.monat AS monat, monate.anzahl AS anzahl FROM ( SELECT makedate, MONTH(makedate) AS monat, COUNT(*) AS anzahl FROM bilder WHERE YEAR(makedate) = '${parent.jahr}' GROUP BY MONTH(makedate) ) monate LEFT JOIN hk_monate ON monate.monat = hk_monate.id </query> <images func="sql" mode="macro"> SELECT * FROM bilder WHERE LEFT(makedate,6) = LEFT('${this.ukey}',6) </images> <caption mode="macro">${this.monat} [${this.anzahl}]</caption> <sort mode="macro">${this.ukey}</sort> <items id="week" image="164"> <query mode="macro"> SELECT makedate AS ukey, WEEK(makedate,1) AS woche, IF( WEEK(makedate,1)=0, WEEK(FROM_DAYS(TO_DAYS(CONCAT(LEFT(makedate,6),'01'))-1),1), WEEK(makedate,1) ) AS woche2, COUNT(*) AS anzahl FROM bilder b WHERE LEFT(makedate,6) = LEFT('${parent.ukey}',6) GROUP BY woche </query> <images func="sql" mode="macro"> SELECT * FROM bilder WHERE LEFT(makedate,6) = LEFT('${this.ukey}',6) AND WEEK(makedate,1) = ${this.woche} </images> <caption mode="macro">${this.woche2}. Woche [${this.anzahl}]</caption> <sort mode="macro">${this.ukey}</sort> <items id="day" image="164"> <query mode="macro"> SELECT makedate AS ukey, hk_monate.monat AS monat, DAY(makedate) AS tag, tage.*, wt.wochentag FROM ( SELECT makedate, WEEK(makedate,1) AS woche, DAYOFWEEK(makedate) AS wtag, COUNT(*) AS anzahl FROM bilder WHERE LEFT(makedate,6) = LEFT('${parent.ukey}',6) AND WEEK(makedate,1) = ${parent.woche} GROUP BY wtag ) tage LEFT JOIN hk_wochentage wt ON tage.wtag = wt.id LEFT JOIN hk_monate ON MONTH(makedate) = hk_monate.id </query> <images func="sql" mode="macro"> SELECT * FROM bilder WHERE makedate = '${this.ukey}' </images> <caption mode="macro">${this.wochentag}, ${this.tag}. ${this.monat} [${this.anzahl}]</caption> <sort mode="macro">${this.ukey}</sort> </items> </items> </items> </items> </node>


  • Ich habe Angst, an die Datenbankstruktur zu gehen. Solange Kai kein grünes Licht gibt, ist die für mich Tabu. Ich kenne mich auch selbst nicht gut genug aus, um die Risiken abschätzen zu können.