NEWS
[Gelöst] Sortierung Json-String aus SQL-Datenbank
-
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.
Die Einstellmöglichkeit im Widget ändert leider nichts.
Habt ihr einen Tip?
-
@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 }
-
@ticaki
Könntest du mir bitte mal deine Schniplsel an die richtige Stelle meines Scripts kopieren.
Ich bekommes es nicht gebacken. -
@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. -
Edit: Hab aber etwas übersehen, sorry ist wahrscheinlich das es nicht funktioniert und ich muß jetzt weg
Edit2: Korrekturvar 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; }
-
@ticaki
fuktioniert leider nicht. -
@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.
-
@ticaki
Danke für deine Unterstützung.
So wie es aussieht funktioniert es mitfunction sortArray(a,b) { return b.ts > a.ts; }
Ich musste a und b vertauschen.