Potrebna pomoć oko upita SQLite baze podataka

SQlite baza.
Tabla ‘obrada’ ima kolumne: ‘kultura’, ‘trosak’
Tabla ‘sezona’ ima kolumne: ‘kultura’, ‘ost_trosak’, ‘prihod’

Upit bi trebao biti takav da vrati sumu troškova i prihoda po kulturama, otprilike ovako:

{echo  $row['kultura']; echo $row['total_troskovi'];  echo $row['prihod'];}

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  ");

Hvala

Probaj nesto ovako:

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

Hvala, nije to to…
ma znam, nisam bio jasan…

treba mi return troškova i prihoda po kulturama u određenoj godini (columna ‘datum’ u tabli ‘obrada’ i kolumna ‘datume’ u tabli sezona

nadam se da se ovdje vidi eksportirana šema (zanemariti suvišne kolumne)

http://sqlfiddle.com/#!7/b3ac5

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);

tabla ‘obrada’

tabla ‘sezona’

Hvala

https://www.w3schools.com/sql/sql_join.asp

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.

mislio sam da ću jednim jednostavnim upitom riješiti potrebno, ali eto, izgleda da nije baš jednostavno…

kako bilo, ponuda stoji za bilo koji način da se dobije (za 2016 g.):

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.

1 Like

Bravo @bozoou, bilježim se sa štovanjem.

Nakon manje prilagodbe (ovaj moj sqlite3 ne podržava year() funkciju i PDO::FETCH_ASSOC statement) sve radi super.

Na PP mi pošalji podatke (iban hr ili paypal) i točan iznos (kn) za uplatu.

Još jednom puno hvala.

1 Like