Mam bardzo poważny problem dlatego postanowiłem się zwrócić do tęgich umysłów świata internetowego.
Stworzyłem system magazynowy w technologii PHP oraz Mysql.
Jestem teraz w trakcie tworzenia funkcji Raportów Sprzedaży (oczywiście działa mi opcja raportów z zaznaczeniem przedziału dat i zaznaczeniem od poszczególnych towarów poprzez grupy towarowe i całego magazynu).
Problem tkwi w tym że muszę mieć informację przy generowaniu raportów sprzedaży o "realnym" dochodzie.
Piszę realny dlatego iż jest pewien problem z tym "realnym" dochodem. W magazynie, w tabeli zakupy mam zapisane m.in. ilość zakupionych oraz cena jednostkowa, czyli teraz
CODE
select ilosc, cena_zak_b, sum(ilosc*cena_zak_b) from zakupy where id_tow_mag='105' group by id
takim zapytaniem otrzymuje informację o ilości zakupionych sztuk, cenie jednostkowej, oraz sumie ilosć*cena czyli sumie którą zapłaciłem za ten towar.Kolejne zapytanie
CODE
select ilosc, cena_sp_b, sum(ilosc*cena_sp_b) from sprzedaze where id_tow_mag='105' group by id
Pozwala na analogicznie wyciągnięcie danych tego samego rodzaju czyli ilości, jednostkowej ceny sprzedaży, oraz wartości sprzedaży. I teraz najważniejsze plan jest taki: żeby obliczyć realny dochód trzeba od wartości sprzedaży odjąć wartość zakupu ALE .
Teraz przykład :
ZAKUPY
300 mb kabla po 0,26 zł/mb dnia 01.01.2009 oraz
500 mb kabla po 0,28 zł/mb dnia 02.02.2009
SPRZEDAŻE
250mb kabla po 0,50 zł
50mb kabla po 1 zł
200mb kabla po 0,60zł
(NO I JAK OBLICZYĆ TEN ZYSK BIORĄC POD UWAGĘ ŻE 300m kupiłem po 0,26zł a 500m po 0,28zł)
no i teraz mój plan aby "realnie" obliczyć dochód tak na "chłopski rozum"
kupiłem 300 metrów kabla po 26 groszy i 500 metrów kabla po 28 groszy za metr
sprzedałem 250 metrów po 50 groszy (liczę teraz z tej kupionej rolki 300 metrów dochód) czyli 250mb*0,26zł=65zł(wartość zakupu 250 metrów po cenie 0,26 zł) 250mb*0,50zł=125zł(wartość sprzedaży 250 metrów po cenie 0,50zł) różnica między nimi stanowi DOCHÓD!
przechodząc dalej obliczamy sprzedane kolejne 50 metrów wykorzystując cenę zakupy 0,26zł obliczamy różnicę i mamy dochód.
W KOLEJNYM KROKU MUSIMY OBLICZAĆ JUŻ Z CENY ZAKUPU 0,28 zł czyli różnica pomiędzy wartością sprzedaży i wartością zakupu ale od ceny jednostkowej 0,28zł
no i w tym jest kłopot.
Ze względu na to że taka analiza jest tylko dla jednego produktu a produktów w bazie na dzisiaj mam około 2 tysięcy.
Potrzebne mi zapytanie Mysql a nie działanie z pośrednictwem PHP (zbyt wolne).
Mam kolejne zapytanie które dzieli mnie już o krok od sukcesu
CODE
select s.ilosc, s.cena_sp_b, z.cena_zak_b, z.ilosc, s.cena_sp_b*s.ilosc-z.cena_zak_b*s.ilosc as dochod, s.datafaktury as datasp, z.datafaktury as datazak, s.nrdokumentu, z.nrfaktury from sprzedaze as s, zakupy as z where s.id_tow_mag='105' and z.id_tow_mag='105' order by s.datafaktury, z.nrfaktury, s.ilosc
Dzięki temu zapytaniu mam informację o dochodzie ale są powielone ilością zakupów(na naszym przykładzie dochód od całej sprzedaży przy cenie zakupu 0,26zł oraz powielone drugi raz dane przy cenie zakupu 0,28zł ). TZN zwyczajnie w wynikach mam realny dochód wszystkich sprzedanych sztuk tego kabla od ceny zakupu 0,26zł ORAZ realny dochód wszystkich sprzedanych sztuk tego kabla od ceny zakupu 0,28zł itd...(gdyby były jeszcze inne zakupy tego samego produktu).
Rozumiem że piszę zagmatwanie ale czy istnieje jakaś prostsza metoda na obliczenie realnego dochodu.
JAK ją zrealizować zapytaniem MYSQL.

Czy jest to nieosiągalne w mysql ?
Mam tutaj jeszcze dane z tabelą zakupów (struktura)
CODE
CREATE TABLE IF NOT EXISTS `zakupy` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data_dodania` datetime NOT NULL,
`id_tow_mag` int(11) NOT NULL,
`id_dostawcy` int(11) NOT NULL,
`id_uz` int(11) NOT NULL,
`cena_zak_b` double NOT NULL,
`cena_zak_n` double NOT NULL,
`vat` varchar(3) COLLATE utf8_polish_ci NOT NULL,
`pkwiu` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
`nrfaktury` varchar(30) COLLATE utf8_polish_ci NOT NULL,
`datafaktury` date NOT NULL,
`jed_m` varchar(4) COLLATE utf8_polish_ci NOT NULL,
`data_platnosci` date DEFAULT NULL,
`suma_platnosci` double DEFAULT NULL,
`podleglosc` int(11) NOT NULL DEFAULT '1',
`znrzl` tinyint(1) DEFAULT '0',
`ilosc` double DEFAULT NULL,
`frm_pl` int(11) DEFAULT NULL,
`kgon` double DEFAULT NULL,
`kgob` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3046 ;
`id` int(11) NOT NULL AUTO_INCREMENT,
`data_dodania` datetime NOT NULL,
`id_tow_mag` int(11) NOT NULL,
`id_dostawcy` int(11) NOT NULL,
`id_uz` int(11) NOT NULL,
`cena_zak_b` double NOT NULL,
`cena_zak_n` double NOT NULL,
`vat` varchar(3) COLLATE utf8_polish_ci NOT NULL,
`pkwiu` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
`nrfaktury` varchar(30) COLLATE utf8_polish_ci NOT NULL,
`datafaktury` date NOT NULL,
`jed_m` varchar(4) COLLATE utf8_polish_ci NOT NULL,
`data_platnosci` date DEFAULT NULL,
`suma_platnosci` double DEFAULT NULL,
`podleglosc` int(11) NOT NULL DEFAULT '1',
`znrzl` tinyint(1) DEFAULT '0',
`ilosc` double DEFAULT NULL,
`frm_pl` int(11) DEFAULT NULL,
`kgon` double DEFAULT NULL,
`kgob` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3046 ;
dane do tabeli zakupy z naszego przykładu:
CODE
INSERT INTO `zakupy` (`id`, `data_dodania`, `id_tow_mag`, `id_dostawcy`, `id_uz`, `cena_zak_b`, `cena_zak_n`, `vat`, `pkwiu`, `nrfaktury`, `datafaktury`, `jed_m`, `data_platnosci`, `suma_platnosci`, `podleglosc`, `znrzl`, `ilosc`, `frm_pl`, `kgon`, `kgob`) VALUES
(91, '2009-01-06 16:36:55', 105, 1, 1, 0.26, 0.21, '22', '', 'INWENTURA2008', '2009-01-03', 'mb.', '2009-01-03', 103865.08, 1, 1, 597, 2, NULL, NULL),
(96, '2009-01-06 16:36:55', 105, 1, 1, 0.24, 0.2, '22', '', 'fvnr1235', '2009-01-03', 'mb.', '2009-01-03', 103865.08, 1, 1, 80, 2, NULL, NULL)
(91, '2009-01-06 16:36:55', 105, 1, 1, 0.26, 0.21, '22', '', 'INWENTURA2008', '2009-01-03', 'mb.', '2009-01-03', 103865.08, 1, 1, 597, 2, NULL, NULL),
(96, '2009-01-06 16:36:55', 105, 1, 1, 0.24, 0.2, '22', '', 'fvnr1235', '2009-01-03', 'mb.', '2009-01-03', 103865.08, 1, 1, 80, 2, NULL, NULL)
Tabela Sprzedaży (struktura):
CODE
CREATE TABLE IF NOT EXISTS `sprzedaze` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data_dodania` datetime NOT NULL,
`id_tow_mag` int(11) DEFAULT NULL,
`id_odbiorcy` int(11) NOT NULL,
`id_uz` int(11) NOT NULL,
`cena_sp_b` double NOT NULL,
`cena_sp_n` double NOT NULL,
`nzwrzm` varchar(120) COLLATE utf8_polish_ci DEFAULT NULL,
`vat` varchar(3) COLLATE utf8_polish_ci NOT NULL,
`pkwiu` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
`nrdokumentu` varchar(30) COLLATE utf8_polish_ci NOT NULL,
`datafaktury` date NOT NULL,
`jed_m` varchar(4) COLLATE utf8_polish_ci NOT NULL,
`data_platnosci` date DEFAULT NULL,
`suma_platnosci` double DEFAULT NULL,
`podleglosc` int(11) NOT NULL DEFAULT '1',
`id_uz_rzl` int(11) DEFAULT NULL,
`ilosc` double DEFAULT NULL,
`frm_pl` int(11) NOT NULL,
`rdz_dok` int(11) DEFAULT NULL,
`zaplacono` double NOT NULL,
`pzstl` double NOT NULL,
`imnzwodb` varchar(40) COLLATE utf8_polish_ci DEFAULT NULL,
`data_sp` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2272 ;
`id` int(11) NOT NULL AUTO_INCREMENT,
`data_dodania` datetime NOT NULL,
`id_tow_mag` int(11) DEFAULT NULL,
`id_odbiorcy` int(11) NOT NULL,
`id_uz` int(11) NOT NULL,
`cena_sp_b` double NOT NULL,
`cena_sp_n` double NOT NULL,
`nzwrzm` varchar(120) COLLATE utf8_polish_ci DEFAULT NULL,
`vat` varchar(3) COLLATE utf8_polish_ci NOT NULL,
`pkwiu` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
`nrdokumentu` varchar(30) COLLATE utf8_polish_ci NOT NULL,
`datafaktury` date NOT NULL,
`jed_m` varchar(4) COLLATE utf8_polish_ci NOT NULL,
`data_platnosci` date DEFAULT NULL,
`suma_platnosci` double DEFAULT NULL,
`podleglosc` int(11) NOT NULL DEFAULT '1',
`id_uz_rzl` int(11) DEFAULT NULL,
`ilosc` double DEFAULT NULL,
`frm_pl` int(11) NOT NULL,
`rdz_dok` int(11) DEFAULT NULL,
`zaplacono` double NOT NULL,
`pzstl` double NOT NULL,
`imnzwodb` varchar(40) COLLATE utf8_polish_ci DEFAULT NULL,
`data_sp` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2272 ;
dane do tabli sprzedaze:
CODE
INSERT INTO `sprzedaze` (`id`, `data_dodania`, `id_tow_mag`, `id_odbiorcy`, `id_uz`, `cena_sp_b`, `cena_sp_n`, `nzwrzm`, `vat`, `pkwiu`, `nrdokumentu`, `datafaktury`, `jed_m`, `data_platnosci`, `suma_platnosci`, `podleglosc`, `id_uz_rzl`, `ilosc`, `frm_pl`, `rdz_dok`, `zaplacono`, `pzstl`, `imnzwodb`, `data_sp`) VALUES
(12, '2009-01-07 18:09:08', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/1', '2009-01-07', 'mb.', NULL, 1349.6, 1, NULL, 33, 1, 3, 175.2, 306.5, '', '0000-00-00'),
(15, '2009-01-07 18:09:08', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/1', '2009-01-07', 'mb.', NULL, 1349.6, 1, NULL, 20, 3, 3, 175.2, 306.5, '', '0000-00-00'),
(16, '2009-01-07 18:09:08', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/1', '2009-01-07', 'mb.', NULL, 1349.6, 1, NULL, 7, 3, 3, 175.2, 306.5, '', '0000-00-00'),
(31, '2009-01-07 18:09:08', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/1', '2009-01-07', 'mb.', NULL, 1349.6, 1, NULL, 10, 3, 3, 175.2, 306.5, '', '0000-00-00'),
(34, '2009-01-07 18:09:08', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/1', '2009-01-07', 'mb.', NULL, 1349.6, 1, NULL, 20, 3, 3, 175.2, 306.5, '', '0000-00-00'),
(37, '2009-01-07 18:09:08', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/1', '2009-01-07', 'mb.', NULL, 1349.6, 1, NULL, 15, 3, 3, 175.2, 306.5, '', '0000-00-00'),
(39, '2009-01-07 18:09:08', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/1', '2009-01-07', 'mb.', NULL, 1349.6, 1, NULL, 7, 3, 3, 175.2, 306.5, '', '0000-00-00'),
(51, '2009-01-08 18:10:42', 105, 0, 1, 0.3, 0.25, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/2', '2009-01-08', 'mb.', NULL, 1237, 1, NULL, 50, 4, 3, 1318, 210.5, '', '0000-00-00'),
(54, '2009-01-08 18:10:42', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/2', '2009-01-08', 'mb.', NULL, 1237, 1, NULL, 2, 1, 3, 1318, 210.5, '', '0000-00-00'),
(61, '2009-01-09 18:12:33', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/3', '2009-01-09', 'mb.', NULL, 3723, 1, NULL, 12, 1, 3, 2355, 148.5, '', '0000-00-00'),
(62, '2009-01-09 18:12:33', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/3', '2009-01-09', 'mb.', NULL, 3723, 1, NULL, 13, 1, 3, 2355, 148.5, '', '0000-00-00'),
(65, '2009-01-09 18:12:33', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/3', '2009-01-09', 'mb.', NULL, 3723, 1, NULL, 30, 3, 3, 2355, 148.5, '', '0000-00-00'),
(67, '2009-01-09 18:12:33', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/3', '2009-01-09', 'mb.', NULL, 3723, 1, NULL, 12, 1, 3, 2355, 148.5, '', '0000-00-00'),
(79, '2009-01-09 18:12:33', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/3', '2009-01-09', 'mb.', NULL, 3723, 1, NULL, 10, 1, 3, 2355, 148.5, '', '0000-00-00'),
(84, '2009-01-09 18:12:33', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/3', '2009-01-09', 'mb.', NULL, 3723, 1, NULL, 8, 1, 3, 2355, 148.5, '', '0000-00-00'),
(85, '2009-01-09 18:12:33', 105, 0, 4, 0.5, 0.41, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/3', '2009-01-09', 'mb.', NULL, 3723, 1, NULL, 16, 1, 3, 2355, 148.5, '', '0000-00-00'),
(92, '2009-01-10 14:21:36', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/4', '2009-01-10', 'mb.', NULL, 6448, 1, NULL, 7, 1, 3, 595.9, 193.6, '', '0000-00-00'),
(113, '2009-01-10 14:21:36', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/4', '2009-01-10', 'mb.', NULL, 6448, 1, NULL, 5, 1, 3, 595.9, 193.6, '', '0000-00-00'),
(119, '2009-01-12 18:06:20', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/5', '2009-01-12', 'mb.', NULL, 1779.39, 1, NULL, 8, 1, 3, 1794.69, 178.3, '', '0000-00-00'),
(125, '2009-01-12 18:06:20', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/5', '2009-01-12', 'mb.', NULL, 1779.39, 1, NULL, 9, 1, 3, 1794.69, 178.3, '', '0000-00-00'),
(141, '2009-01-12 18:06:20', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/5', '2009-01-12', 'mb.', NULL, 1779.39, 1, NULL, 20, 1, 3, 1794.69, 178.3, '', '0000-00-00'),
(149, '2009-01-13 18:12:02', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/6', '2009-01-13', 'mb.', NULL, 672.4, 1, NULL, 8, 1, 3, 1695.4, 131.3, '', '0000-00-00'),
(172, '2009-01-14 18:14:05', 105, 0, 1, 0.3, 0.25, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/7', '2009-01-14', 'mb.', NULL, 3056.46, 1, NULL, 100, 1, 3, 3527.72, 167.04, '', '0000-00-00'),
(226, '2009-01-16 18:31:12', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/9', '2009-01-16', 'mb.', NULL, 6696.68, 1, NULL, 10, 1, 3, 5158.52, 307.2, '', '0000-00-00'),
(235, '2009-01-16 18:31:12', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/9', '2009-01-16', 'mb.', NULL, 6696.68, 1, NULL, 20, 1, 3, 5158.52, 307.2, '', '0000-00-00'),
(236, '2009-01-16 18:31:12', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/9', '2009-01-16', 'mb.', NULL, 6696.68, 1, NULL, 15, 1, 3, 5158.52, 307.2, '', '0000-00-00'),
(257, '2009-01-16 18:31:12', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/9', '2009-01-16', 'mb.', NULL, 6696.68, 1, NULL, 6, 1, 3, 5158.52, 307.2, '', '0000-00-00'),
(260, '2009-01-16 18:31:12', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/9', '2009-01-16', 'mb.', NULL, 6696.68, 1, NULL, 5, 1, 3, 5158.52, 307.2, '', '0000-00-00'),
(273, '2009-01-17 14:05:42', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/10', '2009-01-17', 'mb.', NULL, 2250.5, 1, NULL, 15, 1, 3, 899.07, 278.63, '', '0000-00-00'),
(277, '2009-01-17 14:05:42', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/10', '2009-01-17', 'mb.', NULL, 2250.5, 1, NULL, 10, 1, 3, 899.07, 278.63, '', '0000-00-00'),
(286, '2009-01-19 18:11:32', 105, 0, 4, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/11', '2009-01-19', 'mb.', NULL, 1148.4, 1, NULL, 10, 1, 3, -153.97, 541, '', '0000-00-00'),
(292, '2009-01-19 18:11:32', 105, 0, 1, 1, 0.82, 'Kabel . RG6U ANTENOWY', '22', NULL, 'SD/2009/1/11', '2009-01-19', 'mb.', NULL, 1148.4, 1, NULL, 25, 1, 3, -153.97, 541, '', '0000-00-00')
z góry dziękuje za pomoc chociaż temat nie należy do łatwych.
Pozdrawiam