Ben hareket toplamlarini tabloda simdilik tutmamaya karar verdim.
Bunun disinda soyle bir sorgum var
Kod: Tümünü seç
$sql = mysql_query("SELECT c.id,c.cl_name,c.city,c.contact_person,c.mobil1,sum(ihb.grand_sum) as b_inv_sum, sum(iha.grand_sum) as a_inv_sum from clients as c left join inv_header as ihb on (c.id=ihb.client_id and ihb.inv_type in('2','3','5')) left join inv_header as iha on (c.id=iha.client_id and iha.inv_type in ('1','4')) group by c.id");
Burada bi selff join yapmaya calisiyorum yani inv_header dosyasini iki kez yorumluyorum. inv_type ('2','3','5') degerlerinden birine sahip olan kayitlar borc olarak toplaniyor, inv_type ('1','4') degerlerinden birine sahip olan kayitlar da alacak olarak toplaniyor
tabloda ki alan degerleride asagidaki gibi
Kod: Tümünü seç
id;inv_no;client_id;inv_date;inv_type;adet;net_sum;vat_sum;disc_prcnt;disc_val;grand_sum;inv_exp;exch_rate;carpan 39;3096469;15;2008-04-10;1;10;195.00;37.05;0;0.00;232.05;1;3.67;1
38;3096468;15;2008-04-10;1;2;10.70;2.03;0;0.00;12.73;1;3.67;1
40;3096470;15;2008-04-10;2;10;195.00;37.05;0;0.00;232.05;1;3.67;-1 41;3096471;15;2008-04-10;5;5;100.00;19.00;0;0.00;119.00;1;3.67;-1
id 39 ev 38 su toplami veriyor (232.05+12.73=244.78), ve id 40 ile 41 de (232.05+119=351.05) toplamini veriyor fakat sorgudan donen deger ise
Burada goruldugu gibi double sum yapiyor. Muhtemelen ilgili sartlari saglayan 2 ser kayit oldugundandir. Eger daha fazla olsa bu toplama islemi daha fazla tekrar edecekti.
Burada bu sorguyu dogru toplama sonucunu almak icin nasil degistirebilirim?
Tablo yapilarida su sekildedir
Kod: Tümünü seç
CREATE TABLE IF NOT EXISTS `clients` (
`id` int(11) NOT NULL auto_increment,
`user_name` varchar(20) NOT NULL,
`pass` varchar(20) NOT NULL,
`cl_code` varchar(10) NOT NULL,
`cl_name` varchar(40) NOT NULL,
`shop_name` varchar(30) NOT NULL,
`contact_person` varchar(40) NOT NULL,
`address_inv` varchar(80) NOT NULL,
`address_dlv` varchar(80) NOT NULL,
`city` varchar(40) NOT NULL,
`judet` varchar(40) NOT NULL,
`tel_fix` varchar(15) NOT NULL,
`mobil1` varchar(15) NOT NULL,
`mobil2` varchar(15) NOT NULL,
`email` varchar(30) NOT NULL,
`cui` varchar(20) NOT NULL,
`cif` varchar(15) NOT NULL,
`bank` varchar(30) NOT NULL,
`iban` varchar(30) NOT NULL,
`approved` char(1) NOT NULL,
`suspended` char(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `cl_code` (`cl_code`,`cl_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=79 ;
Kod: Tümünü seç
CREATE TABLE IF NOT EXISTS `inv_header` (
`id` int(11) NOT NULL auto_increment,
`inv_no` varchar(10) collate utf8_romanian_ci NOT NULL,
`client_id` varchar(11) collate utf8_romanian_ci NOT NULL,
`inv_date` date NOT NULL,
`inv_type` varchar(15) collate utf8_romanian_ci NOT NULL,
`adet` int(11) NOT NULL,
`net_sum` decimal(7,2) NOT NULL,
`vat_sum` decimal(7,2) NOT NULL,
`disc_prcnt` int(2) NOT NULL,
`disc_val` decimal(7,2) NOT NULL,
`grand_sum` decimal(7,2) NOT NULL,
`inv_exp` varchar(2) collate utf8_romanian_ci NOT NULL,
`exch_rate` decimal(5,2) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_romanian_ci AUTO_INCREMENT=33 ;