Melina: MySQL Datenbank

Guten Morgen,

bevor ich meine Datenbank für Termine anlegen wollte ich euch fragen, wie ihr diese anlegen würdet und später dieses Ergebnis bzw. Darstellung zu erreichen?

http://www.bilder-upload.eu/upload/c972a6-1421308353.jpg

Meine ID ist folgende:

CREATE TABLE IF NOT EXISTS termine (
id int(11) NOT NULL,
  monat varchar(50) NOT NULL,
  datum\_von varchar(50) NOT NULL,
  datum\_bis varchar(50) NOT NULL,
  titel varchar(200) NOT NULL,
  beschreibung text NOT NULL,
  url varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Und ein Eintrag würde dann so aussehen:

INSERT INTO termine (id, monat, datum\_von, datum\_bis, titel, beschreibung, url) VALUES
(1, 'Janaur 2015', '10.01.', '12.01.', 'Das ist ein Test', 'Hier eine kleine Beschreibung', 'http://wwww.');

  1. Moin

    CREATE TABLE IF NOT EXISTS termine (
    id int(11) NOT NULL,
      monat varchar(50) NOT NULL,
      datum\_von varchar(50) NOT NULL,
      datum\_bis varchar(50) NOT NULL,
      titel varchar(200) NOT NULL,
      beschreibung text NOT NULL,
      url varchar(200) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    Und ein Eintrag würde dann so aussehen:

    INSERT INTO termine (id, monat, datum\_von, datum\_bis, titel, beschreibung, url) VALUES
    (1, 'Janaur 2015', '10.01.', '12.01.', 'Das ist ein Test', 'Hier eine kleine Beschreibung', 'http://wwww.');

    Es gibt einen Datentyp Date. Damit kannst du viele gute Sachen anstellen. Also ich würde das folgendermaßen machen:

      
    CREATE TABLE IF NOT EXISTS `termine` (  
       `id` int(11) NOT NULL AUTO_INCREMENT,  
       `datum_von` date NOT NULL,  
       `datum_bis` date NOT NULL,  
       `titel` varchar(200) NOT NULL,  
       `beschreibung` text NOT NULL,  
       `url` varchar(200) NOT NULL  
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
    
    

    Und die Speicherung dann

      
    INSERT INTO `termine` (`datum_von`, `datum_bis`, `titel`, `beschreibung`, `url`) VALUES  
     ('2015-01-12', '2015-01-10', 'Das ist ein Test', 'Hier eine kleine Beschreibung', 'http://wwww.');
    

    Also immer schön die dafür vorgesehenen Datentypen nutzen!

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    ### Henry L. Mencken ###
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ### Viktor Frankl ###
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Hallo,

      Es gibt einen Datentyp Date. Damit kannst du viele gute Sachen anstellen.

      genau, das wollte ich auch vorschlagen - zusammen mit dem Hinweis, dass die separate Monat-Spalte zu Beginn dann redundant ist. Deswegen hast du sie ja auch schon weggelassen.

      INSERT INTO termine (datum_von, datum_bis, titel, beschreibung, url) VALUES

      ('2015-01-12', '2015-01-10', 'Das ist ein Test', 'Hier eine kleine Beschreibung', 'http://wwww.');

        
      Das Beispiel ist wohl eine Veranstaltung, die rückwärts läuft? ;-)  
      Vielleicht sollte es Teil der späteren Plausibilitätsprüfung sein, dass das Ende-Datum nicht vor dem Beginn-Datum liegt.  
        
      Ciao,  
       Martin  
      
      -- 
      I do take my work seriously, and the way to do that is not to take yourself too seriously.  
        (Alan Rickman, britischer Schauspieler)  
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      
      1. Moin

        Das Beispiel ist wohl eine Veranstaltung, die rückwärts läuft? ;-)
        Vielleicht sollte es Teil der späteren Plausibilitätsprüfung sein, dass das Ende-Datum nicht vor dem Beginn-Datum liegt.

        LOL... Mein Fehler. Natürlich wäre hier eine Prüfung von Vorteil. ;)

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        ### Henry L. Mencken ###
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ### Viktor Frankl ###
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    2. Hallo,

      Es gibt einen Datentyp Date. Damit kannst du viele gute Sachen anstellen. Also ich würde das folgendermaßen machen:

      CREATE TABLE IF NOT EXISTS termine (
         id int(11) NOT NULL AUTO_INCREMENT,
         datum_von date NOT NULL,
         datum_bis date NOT NULL,
         titel varchar(200) NOT NULL,
         beschreibung text NOT NULL,
         url varchar(200) NOT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      
      >   
      > Und die Speicherung dann  
      >   
      > ~~~sql
        
      
      > INSERT INTO `termine` (`datum_von`, `datum_bis`, `titel`, `beschreibung`, `url`) VALUES  
      >  ('2015-01-12', '2015-01-10', 'Das ist ein Test', 'Hier eine kleine Beschreibung', 'http://wwww.');
      
      

      danke für die Verbesserung. Ich sehe du hast mein Feld Monat raus geschmissen warum? Wie du in meinem Bild sehen kannst, möchte ich den Monat getrennt vom Termin auflisten bzw. nur einmal und zwar zu Beginn anzeigen lassen. Laut deinem Code kann ich dieses nicht mehr machen oder war es nur ein versehen den Monat raus zu werfen?

      1. Moin

        danke für die Verbesserung. Ich sehe du hast mein Feld Monat raus geschmissen warum? Wie du in meinem Bild sehen kannst, möchte ich den Monat getrennt vom Termin auflisten bzw. nur einmal und zwar zu Beginn anzeigen lassen. Laut deinem Code kann ich dieses nicht mehr machen oder war es nur ein versehen den Monat raus zu werfen?

        du kannst aus der DAtenbank mittels MONTH auch extra die Monate herausgefiltert ausgeben aus dem 'datum_von -Feld'

        Dies ist aber eine Frage des SELECT. Die Speicherung wäre redundant.

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        ### Henry L. Mencken ###
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ### Viktor Frankl ###
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    3. Und zu Deiner Darstellungsfrage (sprich dass die Monate als Liste erscheinen): das ist von der Speicherung relativ unabhängig. Du musst dazu den Monat auch nicht extra in ein Feld speichern. Das wäre komplett redundant, da diese Information schon im date_from steht.

      Ein Beispiel der Darstellung in php:
      Du liest alle Termine ein (otional zw. einem Datumsinterval) ermittelst den jew. Monat, erstellst ein Array damit, führst array_unique aus, iteriest über diesen Array.

      Cheers,
      Baba

      --
      Baba kommt von Basketball
      1. Moin

        Und zu Deiner Darstellungsfrage (sprich dass die Monate als Liste erscheinen): das ist von der Speicherung relativ unabhängig. Du musst dazu den Monat auch nicht extra in ein Feld speichern. Das wäre komplett redundant, da diese Information schon im date_from steht.

        Ein Beispiel der Darstellung in php:
        Du liest alle Termine ein (otional zw. einem Datumsinterval) ermittelst den jew. Monat, erstellst ein Array damit, führst array_unique aus, iteriest über diesen Array.

        na das ist doch etwas umständlich. Man kann im Select über die MONTH()-Funktion direkt den Monat als Zahl ausgeben. Mit MONTHNAME() und den entsprechenden LC-Einstellungen sogar den deutschen Monatsnamen!

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        ### Henry L. Mencken ###
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ### Viktor Frankl ###
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
        1. Man kann im Select über die MONTH()-Funktion direkt den Monat als Zahl ausgeben.

          Gut. So ermittelst Du den Monatsnamen. Die Frage war aber, wie kommt man zu der angestrebten Darstellung vom OP.

          Cheers,
          Baba

          --
          Baba kommt von Basketball
          1. Moin

            Man kann im Select über die MONTH()-Funktion direkt den Monat als Zahl ausgeben.

            Gut. So ermittelst Du den Monatsnamen. Die Frage war aber, wie kommt man zu der angestrebten Darstellung vom OP.

            Über Gruppenwechsel. So wie in der Informatik üblich. ;)

            Da muss kein Array noch extra bearbeitet werden, außer vielleicht sortiert. ;)

            Gruß Bobby

            --
            -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
            ### Henry L. Mencken ###
            -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
            ### Viktor Frankl ###
            ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
            1. Moin,

              Über Gruppenwechsel. So wie in der Informatik üblich. ;)

              Da muss kein Array noch extra bearbeitet werden, außer vielleicht sortiert. ;)

              da ich mich mit PHP nicht wirklich gut auskennen, wäre es doch für mich am einfachsten den Monat mit anzugeben und dann diesen auch auszulesen und zwar nur einmal?

              1. Moin

                Moin,

                Über Gruppenwechsel. So wie in der Informatik üblich. ;)

                Da muss kein Array noch extra bearbeitet werden, außer vielleicht sortiert. ;)

                da ich mich mit PHP nicht wirklich gut auskennen, wäre es doch für mich am einfachsten den Monat mit anzugeben und dann diesen auch auszulesen und zwar nur einmal?

                Dein SELECT müste wie folgt heißen:

                  
                SELECT *, MONTH(datum_von) AS Monat FROM termine ORDER BY datum_von ASC  
                
                

                oder mit Monatsnamen (abhängig von der LC-Einstellung, ob deutsch oder englisch)

                  
                SELECT *, MONTHNAME(datum_von) AS MONAT FROM termine ORDER BY datum_von ASC  
                
                

                Du kannst die Ausgabe Datum_von und Datum_bis mit DATE_FORMAT() ebenso formatieren, dass es in dem gewünschten Format erscheint

                Dann hast du das selbe Ergebnis wie vorher. ;)

                im PHP

                  
                $ergebnisarray //Ergebnis aus der DB-Abfrage, die du vorher gemacht hast  
                  
                // Variable für temporären Monatsnamen initialisieren  
                $monat="";  
                foreach($ergebnisarray AS $value)  
                {  
                    // Gruppenwechsel  
                    if($value['Monat']!=$monat)  
                    {  
                         $monat=$value['Monat'];  
                         echo $monat;  
                    }  
                    // Ausgabe Eintrag  
                    echo $value['datum_von'];  
                    echo $value['datum_bis'];  
                    echo $value['titel'];  
                    echo $value['beschreibung']  
                }  
                  
                
                

                Das beispiel ist nur EXEMPLARISCH. Natürlich muss alles formatiert werden und die Ausgabe so geschehen wie du das möchtest. Das ist dann aber eine reine HTML-Aufgabe.

                Versuche aus dem SQL möglichst viel qualifiziert zurückgeben zu lassen. Das erspart Arbeit im PHP und das tut der Performance gut

                Gruß Bobby

                --
                -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
                ### Henry L. Mencken ###
                -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
                ### Viktor Frankl ###
                ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
                1. // Gruppenwechsel
                      if($value['Monat']!=$monat)
                      {

                    
                  Besser!  
                    
                  Cheers,  
                  Baba
                  
                  -- 
                  Baba kommt von Basketball
                  
              2. Liebe Mitdenker,
                liebe Wissende,
                liebe Neugierige,

                da ich mich mit PHP nicht wirklich gut auskennen, wäre es doch für mich am einfachsten den Monat mit anzugeben und dann diesen auch auszulesen und zwar nur einmal?

                Das geht auch mit SQL und Benutzervariablen.
                Solange sich der Monat nicht ändert von einem Satz zum anderen, wird statdessen ein Leerstring ausgegeben. Dafür müssen die Datensätze nur nach Monaten sortiert ausgegeben werden

                set @aktmonat = '';
                select if(monat = @aktmonat ,'  "  ', @aktmonat := monat)) as monatsname, beschreibung
                from termine order by monat;

                Spirituelle Grüße
                Euer Robert

                --
                Möge der Forumsgeist wiederbelebt werden!
                1. Liebe Mitdenker,
                  liebe Wissende,
                  liebe Neugierige,

                  ja!

                  Liebe Mitdenker,
                  liebe Wissende,
                  liebe Neugierige,

                  Das geht auch mit SQL und Benutzervariablen.
                  Solange sich der Monat nicht ändert von einem Satz zum anderen, wird statdessen ein Leerstring ausgegeben. Dafür müssen die Datensätze nur nach Monaten sortiert ausgegeben werden

                  set @aktmonat = '';
                  select if(monat = @aktmonat ,'  "  ', @aktmonat := monat)) as monatsname, beschreibung
                  from termine order by monat;

                  Ich bin mir hier nicht sicher, ob die Query so schon sicher ist.

                  Ich vermute, dass man der mit einem unbedingten Subselect arbeiten muss, das nach Monaten sortiert wird und das dann erst an das Select mit der Bedingung übergeben darf.

                  Das ist hier jetzt zwar kein gefährlicher Fall von Reihenfolgemissachtung, aber der Ordnung halber wolle ich das mal in den Raum stellen!

                  Sortiert wird i.d.R. das _Abfrageergebnis_ und nicht die abzufragende Menge.

                  Spirituelle Grüße
                  Euer Robert

                  --
                  Möge der Forumsgeist wiederbelebt werden!
                  1. Tach!

                    set @aktmonat = '';
                    select if(monat = @aktmonat ,'  "  ', @aktmonat := monat)) as monatsname, beschreibung
                    from termine order by monat;
                    Ich bin mir hier nicht sicher, ob die Query so schon sicher ist.

                    Das dürfte sie nicht sein.

                    Ich vermute, dass man der mit einem unbedingten Subselect arbeiten muss, das nach Monaten sortiert wird und das dann erst an das Select mit der Bedingung übergeben darf.

                    Ich vermute, dass das nicht zielführend ist.

                    SELECT * FROM (SELECT * FROM test ORDER BY spalte) t2

                    Die Ausgabe war jedenfalls nicht nach spalte sortiert. Ohne die äußere Query war sie das aber.

                    Das ist hier jetzt zwar kein gefährlicher Fall von Reihenfolgemissachtung, aber der Ordnung halber wolle ich das mal in den Raum stellen!
                    Sortiert wird i.d.R. das _Abfrageergebnis_ und nicht die abzufragende Menge.

                    Richtig. Und zwar auch erst nachdem die SELECT-Klausel berechnet wurde, denn man bezieht sich ja beim OEDER BY auf einen (Alias-)Namen oder eine Spaltennummer der SELECT-Klausel. Zum Sortieren danach muss der Ausdruck bereits berechnet sein. (Fürs Verständnis: Die SELECT-Klausel ist nur der erste Teil des SELECT-Statements, bis ausschließlich zum FROM.)

                    Weiterhin stehen im Kapitel zu den User-Defined Variables einige weitere Fallstricke. Das muss man erstmal gründlich testen, ob ein solches Statement das gewünschte Ergebnis bringt - und dnan ist es noch nicht mal garantiert.

                    Das Handbuch schweigt sich auch darüber aus, ob IF() nach dem Kurzschlussverfahren arbeitet oder nicht. IF() müsste dazu anders als Funktionen im Allgemeinen arbeiten, denn normalerweise werden zuerst die Argumente berechnet und übergeben, und dann die Funktion ausgeführt, dass sie daraus ein Ergebnis erzeugen kann. @aktmonat := monat ist ja kein Lambda-Ausdruck, der erst vom Inneren der Funktion ausgeführt wird. Das ist aber von dir beabsichtigt.

                    dedlfix.

  2. Liebe Mitdenker,
    liebe Wissende,
    liebe Neugierige,

    ja!

    Guten Morgen,

    bevor ich meine Datenbank für Termine anlegen wollte ich euch fragen, wie ihr diese anlegen würdet und später dieses Ergebnis bzw. Darstellung zu erreichen?

    http://www.bilder-upload.eu/upload/c972a6-1421308353.jpg

    Meine ID ist folgende:

    [code lang =sql]
    CREATE TABLE IF NOT EXISTS termine (
       id int(11) NOT NULL,
       monat varchar(50) NOT NULL,
       datum\_von varchar(50) NOT NULL,
       datum\_bis varchar(50) NOT NULL,
       titel varchar(200) NOT NULL,
       beschreibung text NOT NULL,
       url varchar(200) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    [/code]

    Und ein Eintrag würde dann so aussehen:

    INSERT INTO termine (id, monat, datum\_von, datum\_bis, titel, beschreibung, url) VALUES
    (1, 'Janaur 2015', '10.01.', '12.01.', 'Das ist ein Test', 'Hier eine kleine Beschreibung', 'http://wwww.');

    Drei Dinge sollten wir wissen:

    • Wer soll die Termine eintragen in die Datenbank?
    • Dürfen sich die Termine überlappen?
    • Haben die eigentlich auch eine Anfangs- und Endzeit?
      
    CREATE TABLE IF NOT EXISTS `termine` (  
       `id` int(11) NOT NULL,  
       `anfang` datetime NOT NULL,  
       `ende`   datetime,  
       `titel`  varchar(255) NOT NULL,  
       `id_ort` int(11) NOT NULL,  
       `beschreibung` text,  
       `url` varchar(255)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
      
    -- und da fehlen ggf. noch diverse Metadaten-Spalten  
      
    
    

    Weitere Fragen:

    • Gibt es regelmäßige Termine?
    • Dürfen die Termine editiert (Update) werden?
    • Ist der Ort egal?
    • ...

    Das Insert-Statement hängt davon ab, ob sich die Termine überlappen müssen, ob der Eintragende dafür angemeldet sein muss, usw.

    Spirituelle Grüße
    Euer Robert

    --
    Möge der Forumsgeist wiederbelebt werden!
    1. Hallo,

      Drei Dinge sollten wir wissen:

      • Wer soll die Termine eintragen in die Datenbank?
      • Dürfen sich die Termine überlappen?
      • Haben die eigentlich auch eine Anfangs- und Endzeit?

      ich weiß zwar nicht was diese Fragen mit meinem Problem zu tun haben, aber ich will sie dir gerne beantworten:

      • Wer soll die Termine eintragen in die Datenbank?

      Jeder der den Link kennt und entsprechende Admin Rechte hat!

      • Dürfen sich die Termine überlappen?

      Selbstverständlich.

      • Haben die eigentlich auch eine Anfangs- und Endzeit?

      Jedes Event hat natürlich ein Beginn und ein Ende, was aber in diesem Fall keine Rolle spielt, da ich mit den Terminen nichts machen werde als für ein komplettes Jahr ausgeben. Auch sollten Termine die in der Vergangenheit liegen angezeigt werden.

      CREATE TABLE IF NOT EXISTS termine (
         id int(11) NOT NULL,
         anfang datetime NOT NULL,
         ende   datetime,
         titel  varchar(255) NOT NULL,
         id_ort int(11) NOT NULL,
         beschreibung text,
         url varchar(255)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      -- und da fehlen ggf. noch diverse Metadaten-Spalten

        
      Metadaten liegen bei mir in einer anderen Tabelle und haben mit den Terminen nichts zu tun.  
        
      
      > - Gibt es regelmäßige Termine?  
      
      Kann gut sein, kenne ich zu diesem Zeitpunkt allerdings nicht und spielt auch keine Rolle für mein Vorhaben. Sollte ein Termin 2016 wieder stattfinden, wird er wieder eingetragen, da es 100% eine andere Beschreibung gibt.  
        
      
      > - Dürfen die Termine editiert (Update) werden?  
      
      Hat mit der Ausgabe überhaupt nichts zu tun  
        
      
      > - Ist der Ort egal?  
      
      Auch dieses hat mit der Ausgabe nichts zu tun. Ob ich in das Feld "Köln, Berlin, München" oder "Privat bei mir daheim" schreibe, spielt absolut keine Rolle.  
        
      
      > Das Insert-Statement hängt davon ab, ob sich die Termine überlappen müssen, ob der Eintragende dafür angemeldet sein muss, usw.  
        
      Es war hier nie die Frage nach einem Insert und ob ein User angemeldet sein.
      
      1. Liebe Mitdenker,
        liebe Wissende,
        liebe Neugierige,

        ja!

        Schade, dass Du so arrogant bist.

        Spirituelle Grüße
        Euer Robert

        --
        Möge der Forumsgeist wiederbelebt werden!
        1. Hallo,

          Schade, dass Du so arrogant bist.

          arrogant wäre ich, wenn ich zu dir gesagt hätte "Leck mich am Arsch, was geht dich das an!" Ich bin auf deine Fragen eingegangen obwohl diese mit diesem Thema wie z.B. das speichern der Daten und ob nur ein Admin die Daten eintragen darf nichts zu tun hat.

          Warum bin ich also arrogant?

          1. Om nah hoo pez nyeetz, Melina!

            Warum bin ich also arrogant?

            Nun ja, für mich entsteht auch dieser Eindruck:

            Du schreibst im Eröffnungsbeitrag

            bevor ich meine Datenbank für Termine anlegen wollte ich euch fragen, wie ihr diese anlegen würdet und später dieses Ergebnis bzw. Darstellung zu erreichen?

            „*bevor* ich meine Datenbank … anlege“
            Dann kommen Ergänzungsfragen, die aus meiner Sicht unmittelbar mit der Struktur einer DB zu tun haben, bzw. deren Antworten unmittelbaren Einfluss auf die Umsetzung der Datenbank haben, d.h. Fragen, die man sich *unbedingt* stellen sollte, *während* man seinen Datenbankentwurf zum Beispiel mithilfe eines ERM visualisiert, die du abtust mit

            ich weiß zwar nicht was diese Fragen mit meinem Problem zu tun haben

            === schnipp ===

            • Dürfen die Termine editiert (Update) werden?

            Hat mit der Ausgabe überhaupt nichts zu tun

            • Ist der Ort egal?

            Auch dieses hat mit der Ausgabe nichts zu tun. Ob ich in das Feld "Köln, Berlin, München" oder "Privat bei mir daheim" schreibe, spielt absolut keine Rolle.

            Das Insert-Statement hängt davon ab, ob sich die Termine überlappen müssen, ob der Eintragende dafür angemeldet sein muss, usw.

            Es war hier nie die Frage nach einem Insert und ob ein User angemeldet sein.
            === schnapp ===

            Die Frage war: „Wie würdet ihr eine Datenbank für Termine anlegen?“ Die Antworten auf die gestellten Fragen haben *entscheidenden* Einfluss auf die Struktur der Datenbank.

            Matthias

            --
            Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Sieg und Siegel.