piotrekn Napisano Sierpień 10, 2012 Zgłoś Share Napisano Sierpień 10, 2012 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 More sharing options...