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?
-
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 } -
@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. -
@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; } -
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.
-
@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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden