Baza danych
id|produkt|ilosc|cenausd|kurs|cenapln|totalusd|totalpln|
Co już mam. (wersja uproszczona)
Mam w bazie danych 10 produktów i ich ceny w USD, PLN i kurs usdpln z momentu dodania do bazy każdego z nich.
Wyświetlam kiedy zostały dodane, ile kosztowały w USD i w przeliczeniu na PLN ile kosztują teraz USD i PLN obliczam czy staniały czy zdrożały i o ile.
Aktualny kurs USDPLN jest pobierany każdorazowo przez osobny skrypt i zapisany do zmiennej.
Aktualna cena produktu w USD jest pobierana każdorazowo przez osobny skrypt i zapisana do zmiennej.
/* Kod jest oczywiście znacznie dłuższy, ale na potrzeby forum został okrojony ze wszelkich zbędnych w tym temacie danych aby było czytelniej*/ while($row = $display->fetch(PDO::FETCH_ASSOC)) { /*--------------------------- ------------- ZMIENNE BD ------------ -----------------------------*/ $id = $row['id']; $produkt = $row['produkt']; $ilosc = $row['ilosc']; $cenausd = $row['cenausd']; $cenapln = $row['cenapln']; $totalusd = $row['totalusd']; $totalpln = $row['totalpln']; $kurs =$row['kurs']; /*--------------------------- ------------- ZMIENNE LICZONE ------------ -----------------------------*/ $apiSource = curl_init(); curl_setopt($apiSource, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($apiSource, CURLOPT_RETURNTRANSFER, true); curl_setopt($apiSource, CURLOPT_URL,"http://localhost.pl/api/price-".$produkt.""); $result_api = curl_exec($apiSource); curl_close($apiSource); $apires = json_decode($result_api); $akurs = '3'; /* Tak dla ułatwienia */ $acenausd = $apires->price; $acenapln = $acenausd*$akurs; /* acenapln i acenausd to po prostu aktualna cena w danej walucie*/ $atcenapln = $acenapln*$ilosc; /* at... Aktualna całkowita wartość za dany produkt cena*ilość */ $atcenausd = $acenausd*$ilosc; } $cartpriceusd = $conn->prepare('SELECT sum(totalusd) FROM handel '); /* w taki sposób sumuję całą kolumnę */ $cartpriceusd->execute(); $cartpriceusd = $cartpriceusd->fetchColumn(); $cartpricepln = $conn->prepare('SELECT sum(totalpln) FROM handel '); $cartpricepln->execute(); $cartpricepln = $cartpricepln->fetchColumn();
I tu mam problem chcę policzyć $acartpriceusd i $acartpricepln czyli aktualną wartość wszystkiego w bazie danych w obu walutach. Muszę albo w pętli wyżej jakoś zsumować wartości zmiennej $atcenapln z każdej iteracji, albo jakoś zrobić to poza tą pętlą.
W sumie jest jeszcze metoda dodania do bazy pól na aktualne dane, i Update tych pól przy każdym odpaleniu skryptu ale czy jest to konieczne?
/*UPDATE TERAZ PRZY KAŻDYM ZAŁADOWANIU STRONY SKRYPT UMIESZCZA W BAZIE AKTUALNE CENY*/ $updateprices = $conn->prepare("UPDATE handel SET atcecnapln= :atcecnapln, atcecnausd= :atcecnausd WHERE id = :id"); $updateprices->bindParam(':id', $id); $updateprices->bindParam(':atcecnausd', $atcenausd); $updateprices->bindParam(':atcecnapln', $atcenapln); $updateprices->execute();
Powyższe oczywiście w pętli umieszczone odpowiednio

A poniższe to po prostu suma z kolumny
$acartpriceusd = $conn->prepare('SELECT sum(atcecnausd) FROM handel '); /* w taki sposób sumuję całą kolumnę */ $acartpriceusd->execute(); $acartpriceusd = $acartpriceusd->fetchColumn(); $acartpricepln = $conn->prepare('SELECT sum(atcecnapln) FROM handel '); $acartpricepln->execute(); $acartpricepln = $acartpricepln->fetchColumn();