Evo kako bi to trebalo po skolski. Prvo, struktura podataka (i primeri):
Code:
CREATE TABLE `meseci` (
`id_meseca` tinyint(2) default '0',
`naziv` varchar(10) default '0'
) ENGINE=MyISAM;
INSERT INTO meseci (id_meseca, naziv) VALUES("1", "januar");
INSERT INTO meseci (id_meseca, naziv) VALUES("2", "februar");
INSERT INTO meseci (id_meseca, naziv) VALUES("3", "mart");
INSERT INTO meseci (id_meseca, naziv) VALUES("4", "april");
INSERT INTO meseci (id_meseca, naziv) VALUES("5", "maj");
INSERT INTO meseci (id_meseca, naziv) VALUES("6", "jun");
INSERT INTO meseci (id_meseca, naziv) VALUES("7", "jul");
INSERT INTO meseci (id_meseca, naziv) VALUES("8", "avgust");
INSERT INTO meseci (id_meseca, naziv) VALUES("9", "septembar");
INSERT INTO meseci (id_meseca, naziv) VALUES("10", "oktobar");
INSERT INTO meseci (id_meseca, naziv) VALUES("11", "novembar");
INSERT INTO meseci (id_meseca, naziv) VALUES("12", "decembar");
CREATE TABLE `prihodi` (
`id_radnika` tinyint(3) unsigned NOT NULL default '0',
`datum_placanja` date default '0000-00-00',
`iznos` int(10) default '0'
) ENGINE=MyISAM;
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("1", "2004-03-21", "3000");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("2", "2004-03-21", "4000");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("3", "2004-03-21", "3500");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("1", "2004-04-21", "3100");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("2", "2004-04-21", "3900");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("1", "2004-05-21", "3800");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("3", "2004-05-21", "4200");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("2", "2004-06-21", "2800");
CREATE TABLE `radnici` (
`id_radnika` tinyint(3) default '0',
`naziv` varchar(15) default '0'
) ENGINE=MyISAM;
INSERT INTO radnici (id_radnika, naziv) VALUES("1", "pera");
INSERT INTO radnici (id_radnika, naziv) VALUES("2", "mika");
INSERT INTO radnici (id_radnika, naziv) VALUES("3", "laza");
Iz ovoga se sledecim upitom dobija pregled zbira prihoda za sve radnike i sve mesece po radnicima.
Code:
SELECT
r.id_radnika, r.naziv,
m.id_meseca, m.naziv as mesec,
SUM(p.iznos)
FROM radnici r, meseci m
LEFT JOIN prihodi p on (MONTH(p.datum_placanja) = m.id_meseca) and p.id_radnika = r.id_radnika
GROUP BY id_radnika, id_meseca
ORDER BY id_radnika, id_meseca
Ako ti treba izvestaj samo za jednog radnika, samo dodaj filter u WHERE uslov.