Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

piotrekn

Podsumy i wybieranie wierszy

Polecane posty

Mam pewien problem z przetwarzaniem danych do wyświetlania w tabeli.

Jest pewien zestaw danych, które pobieram z bazy danych i na surowo, z pomocą Ajaxa, przerzucam do JavaScripta jako JSON, przez który później iteruję. Niektóre wiersze trzeba ze sobą grupować. Ich poszczególne zawartości są wyświetlane jako "podwiersze", a ich suma jako "zwykły" wiersz. O łączeniu wierszy informują mnie rozmaite flagi umieszczone w zapytaniu SQL, więc samo rozpoznanie jest dość proste, ale... Nie mam zielonego pojęcia jak jednocześnie skutecznie podsumować te wiersze i ich pojedyncze wartości.

Żeby nie było zbyt łatwo, jest pewien haczyk. Baza obsługuje transakcje i podtransakcje. Do tabeli z pierwszymi dołaczam tabelę z drugimi, zatem w tym konkretnym przypadku łączenia (jednym z trzech) mam w wierszu zarówno wartość podtranskacji, jak i całości. Z jednej strony, ten przypadek jest rozwiązany, ale pozostają jeszcze dwa (transakcje w przeciągu pół godziny i transakcja niepełna).

for(var i = 0; i < cnt; i++)
{
//alert("a - "+i);
var d = Date.parse(String(input[i]["DATA"]+' '+input[i]["GODZINA"]));
if((i+1) < cnt)
var d1 = Date.parse(String(input[i+1]["DATA"]+' '+input[i+1]["GODZINA"]));
if(input[i]["TDP"] == "N" && (i+1) < cnt)
{
addElem.push(input[i+1]);
input[i+1]["DIFF"] = parseInt(input[i+1]["DIFF"]) + parseInt(input[i]["DIFF"]);
input[i+1]["SUMA"] = round2(parseFloat(input[i+1]["SUMA"]) + parseFloat(input[i]["SUMA"]));
input[i+1]["ZUZYCIE-T"] = round2(parseFloat(input[i+1]["ZUZYCIE-T"]) + parseFloat(input[i]["ZUZYCIE-T"]));
input[i+1]["ROZNICA"] = round2(parseFloat(input[i+1]["ROZNICA"]) + parseFloat(input[i]["ROZNICA"]));
input[i+1]["NORMA"] = input[i+1]["SUMA"] / input[i+1]["DIFF"];
if(input[i+1]["TRYB"] == "N")
input[i+1]["NORMA"] = round3(input[i+1]["NORMA"] * 100);
continue;
}
sumaprzeb += Number(input[i]["DIFF"]);
sumatank += Number(input[i]["SUMA"]);
suma += Number(input[i]["ZUZYCIE-T"]);
tab += "<tr><td>";
if(input[i]["TSC"] == "Y")
{
tab += '<a onclick="tRow('+input[i]["RECNO"]+')" href="javascript:void(null)" id="'+input[i]["RECNO"]+'">[+]</a>';
//alert("b - "+i);
}
var norma = parseFloat(input[i]["NORMA"]);
tab += "</td><td>"+input[i]["DATA"]+' '+input[i]["GODZINA"]+"<?php if(isset($_GET['debug2']))echo '<input type=\"hidden\" value=\""+d+"\" />'; ?></td><td>";
tab += input[i]["KIEROWCA"]+"</td><td>"+input[i]["PRZEBIEG"]+"</td><td>"+input[i]["DIFF"]+"</td><td>"+input[i]["NORMA-T"]+"</td><td>"+input[i]["NORMA"];
tab += "<?php if(isset($_GET['debug2']))echo '<input type=\"hidden\" value=\""+norma+"\" />'; ?></td><td>";
tab += input[i]["ZUZYCIE-T"]+"</td><td>"+input[i]["SUMA"]+"</td><td>"+input[i]["ROZNICA"]+"</td><td>"+input[i]["TDP"]+"</td><td>"+input[i]["TRYB"]+"</td>";
tab += "</tr>\n";
spalanieTeor[car.id] = input[i]["NORMA-T"];
//alert("c - "+i);
//alert("d - "+i);
//alert(d);
if(input[i]["TSC"] == "Y")
{
//alert("e - "+i);
var recno = input[i]["RECNO"];
do
{
tab += '<tr class="'+recno+'" id="sub"><td></td><td>'+input[i]["CZAS-P"]+'</td><td></td><td></td><td></td><td></td><td></td><td></td><td>';
tab += input[i]["ILE"]+'</td></tr>';
//alert("f - "+i);
i++;
}
while(i < cnt && recno == input[i]["RECNO"])
i--;
}
if(norma/spalanieTeor[car.id] > 0.2 && norma/spalanieTeor[car.id] < 1.
{
spalaniePrak[car.id].push(
{
x: d,
y: norma
});
}
tryb = input[i]["TRYB"];
var normat = input[i]["NORMA-T"];
}

Jak na razie udaje mi się tylko dodać wiersze w pozostałych przypadkach. Próbowałem sprawdzać flagi na samym początku i próbować wejść w oddzielny "obieg" np. za pomocą pętli FOR i zwiększania i, gdzie wytwarzałbym cały wiersz i pomijał resztę iteracji słówkiem continue (podobnie jak teraz dodaję do siebie wiersze). Nie wyszło (FOR w FORze żeby dodać do siebie wartości, potem wypluć "główny wiersz" z sumami i znów FOR w FORze żeby wypluć "podwiersze").

Jeśli ktoś ma pomysł jak to mógłbym rozwiązać (z choćby odrobinką kodu), byłbym wdzięczny.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...