Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Gelöst] Sortierung Json-String aus SQL-Datenbank

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst] Sortierung Json-String aus SQL-Datenbank

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stenmic last edited by stenmic

      Moin,
      mit folgendem Script schreibe ich Daten aus der Datenbank in einen Json-String um ihn in VIS darzustellen.

      var end = new Date().getTime();
      sendTo('sql.0', 'getHistory', {
      
          // QUELLE SQL ---------------------------------------------------------------
          id: 'javascript.0.xxx',
          // QUELLE SQL ---------------------------------------------------------------
          
          options: {
          end:       new Date().getTime(),
          count:     10,
          aggregate: 'onchange'
      	}
      }, function (result) {
          Jstring = "[";
          for (var i = 0; i < result.result.length; i++) {
          Jstring = Jstring + "{\"Datum\":\""+formatDate(result.result[i].ts, "DD.MM.")+"\",\"Dauer\":\""+result.result[i].val+"\"}";
           if (i < result.result.length-1) {
      	Jstring = Jstring +",";
      	}
      }
          Jstring = Jstring + "]"
      
          //ZIEL Datenpunkt -----------------------------------------------------------
          setState('javascript.0.xxx_json',  Jstring);
          //ZIEL Datenpunkt -----------------------------------------------------------
      });
      

      Nun würde ich gerne den neusten Eintrag oben stehen haben und ich schaffe es nicht die Sortierung zu ändern.

      Image 003.jpg

      Die Einstellmöglichkeit im Widget ändert leider nichts.

      Image 006.jpg

      Habt ihr einen Tip?

      T 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @stenmic last edited by ticaki

        @stenmic
        Hallo,
        das Array vorher zu sortieren wäre doch bestimmt eine Möglichkeit oder?

        }, function (result) {
            if (!Array.isArray(result.result)) return;
            result.result.sort(sortArray);
            Jstring = "[";
            for (var i = 0; i < result.result.length; i++) {
        
        function sortArray(a,b) {
          //var t1 = a[0].split('.');
          //var t2 = b[0].split('.');
          //return ((t1[0]*31+t1[1]) - (t2[0]*31+t2[1]));
        // falsch
        }
        
        S 1 Reply Last reply Reply Quote 0
        • S
          stenmic @ticaki last edited by

          @ticaki
          Könntest du mir bitte mal deine Schniplsel an die richtige Stelle meines Scripts kopieren.
          Ich bekommes es nicht gebacken.

          T 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @stenmic last edited by ticaki

            @stenmic
            der 1. Teil ist da wo er hin soll. Der 2. Teil einfach ganz am Anfang oder Ende
            Habs nochmal editiert,da es mit 30 als Monatstage ein Problem am 1.02/31.01 erzeugt. 31 erzeugt soweit ich das sehe nie ein problem. 🙂

            T 1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @ticaki last edited by ticaki

              Edit: Hab aber etwas übersehen, sorry ist wahrscheinlich das es nicht funktioniert und ich muß jetzt weg 🙂
              Edit2: Korrektur

              var end = new Date().getTime();
              sendTo('sql.0', 'getHistory', {
               
                  // QUELLE SQL ---------------------------------------------------------------
                   id: 'javascript.0.xxx',
                   // QUELLE SQL ---------------------------------------------------------------
                   
                   options: {
                   end:       new Date().getTime(),
                   count:     10,
                   aggregate: 'onchange'
               	}
               }, function (result) {
                    if (!Array.isArray(result.result)) return;
                    result.result.sort(sortArray);
                    Jstring = "[";
                   for (var i = 0; i < result.result.length; i++) {
                   Jstring = Jstring + "{\"Datum\":\""+formatDate(result.result[i].ts, "DD.MM.")+"\",\"Dauer\":\""+result.result[i].val+"\"}";
                    if (i < result.result.length-1) {
               	Jstring = Jstring +",";
               	}
               }
                   Jstring = Jstring + "]"
                
                   //ZIEL Datenpunkt -----------------------------------------------------------
                   setState('javascript.0.xxx_json',  Jstring);
                   //ZIEL Datenpunkt -----------------------------------------------------------
               });
              
              function sortArray(a,b) {
                //var t1 = a.ts.split('.');
                //var t2 = b.ts.split('.');
                // return ((t1[0]*31+t1[1]) - (t2[0]*31+t2[1]));
                return a.ts > b.ts;
              }
              
              S 1 Reply Last reply Reply Quote 0
              • S
                stenmic @ticaki last edited by

                @ticaki
                fuktioniert leider nicht.

                Image 007.jpg

                T 1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @stenmic last edited by ticaki

                  @stenmic
                  Ja sorry hatte ich schon gesehen 🙂 Die erste Version meines Snips hat nach Dauer sortiert und ich hab dann nur schnell auf Datum geändert ohne mir über datentypen gedanken zu machen.

                  Ich weiß leider nicht was genau in "ts" steht

                  function sortArray(a,b) {
                    return a.ts > b.ts;
                  }
                  

                  oder

                  function sortArray(a,b) {
                    return a.ts.getTime() > b.ts.getTime();
                  }
                  

                  eines der beiden sollte funktionieren.

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    stenmic @ticaki last edited by

                    @ticaki
                    Danke für deine Unterstützung.
                    So wie es aussieht funktioniert es mit

                    function sortArray(a,b) {
                      return b.ts > a.ts;
                    }
                    

                    Ich musste a und b vertauschen.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    423
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    333
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo