Ja sam uspio sa “troškovima”, ali ne znam ubaciti “prihod”
$finkt = $myPDO->query("select kultura, sum(uktr) as total_troskovi from (
select kultura, trosak from obrada WHERE datum between '$god-01-01' AND '$god-12-31' union select kultura, ost_trosak from sezona WHERE datumkraj between '$god-01-01' AND '$god-12-31'
) group by kultura ");
SELECT
obrada.kultura,
(sum(obrada.trosak) + sum(sezona.ost_trosak)) as 'rashod',
sum(sezona.prihod) as 'prihod',
(`prihod`-(sum(obrada.trosak) + sum(sezona.ost_trosak))) as 'dobit'
FROM obrada
LEFT JOIN sezona ON obrada.id = sezona.kultura_id
GROUP BY obrada.kultura
Koji je url stranice gdje freelanceri (indijci) za par dolara riješe ovakav upit.
Ili ako netko ovdje hoće, plaćam 10$ za rješenje.
Znači trebam ova dva upita ukomponirati u jedan
select (kultura, SUM(ost_trosak), sum(prihod) from sezona where datume between '2016-01-01' and '2016-12-31' group by kultura);
select (kultura, sum(trosak) from obrada where datum between '2016-01-01' and '2016-12-31' group by kultura);
Zašto se zamaraš da to staviš pod jedan upit? …s obzirom da su to različite tablice, različiti kljucevi po kojima se grupa, iako istog imena… ne postizes baš nikakvu optimizaciju da strpas sve u jedan upit.
Evo ti rješenja traženoga, koliko sam shvatio…ti nisi prisiljen odraditi to u jednom SQL upitu.
$god=2017; //!!! ovdje definiraš za koju godinu želiš rezultate
$result=[];
$query="SELECT kultura,sum(prihod) as prihod,sum(ost_trosak) as ost_trosak FROM sezona WHERE YEAR(datume)=$god group by kultura";
$STH = $myPDO->query($query);
while($row = $STH->fetch(PDO::FETCH_ASSOC))
{
$result[$row['kultura']]=$row;
}
$query="SELECT kultura,SUM(trosak) as trosak FROM obrada WHERE YEAR(datum)=$god group by kultura";
$STH = $myPDO->query($query);
while($row = $STH->fetch(PDO::FETCH_ASSOC))
{
if(!isset( $result[$row['kultura']])) $result[$row['kultura']]=[];
$result[$row['kultura']]['trosak']=$row['trosak'];
}
foreach($result as $kultura=>$val)
{
$trosak = isset($val['trosak']) ? $val['trosak'] : 0;
$ost_trosak = isset($val['ost_trosak']) ? $val['ost_trosak'] : 0;
$prihod = isset($val['prihod']) ? $val['prihod'] : 0;
$dobit = $prihod-$ost_trosak-$trosak;
echo ("kultura: $kultura, trosak: $trosak, ost_trosak: $ost_trosak, prihod: $prihod, dobit: $dobit");
}
Evo i pojašnjenja:
Prvi SQL upit dohvaća podatke iz sezone, grupira rezultate po ključu "kultura"
Drugi SQL upit dohvaća podatke iz tablice “obrada”, te pridružuje rezultat na isti ključ “kultura” …to se sve nalazi u varijabli $result.
Zadnja foreach petlja prolazi kroz varijablu $result, te za svaku kulturu uzima vrijednosti trosak,ost_trosak i prihod…te iz toga računa dobit. Ukoliko neki od prve trojce je ostao nedefiniran, da nisi imao zadanu tu vrijednost u tablicama…onda će ta vrijednost biti pretpostavljena kao 0.
Ovdje gdje sam stavio echo, tu radiš što te volja sa svojim podacima.
PS. pojednostavnio sam
datum between '$god-01-01' AND '$god-12-31'
u
year(datum)=$god
…ako poželiš uzimati rezultate između specifičnih datuma, lako vratiš taj dio u prvotni oblik.