Bonjour,
Je dispose de deux tables ayant cette structure
Ces tables correspondent à la liste des factures et avoir, sinvoicev pour les entêtes et sinvoiced pour le détail des factures et avoirs. Pour différencier une facture d'un avoir c'est le champ sinvoicev.invtyp (1 pour une facture et 2 pour un avoir).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 CREATE TABLE IF NOT EXISTS `sinvoiced` ( `num` varchar(15) NOT NULL, `itmref` varchar(20) NOT NULL, `netpri` decimal(13,2) NOT NULL, `qty` decimal(13,2) NOT NULL, `tsicod` varchar(3) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=''; ALTER TABLE `sinvoiced` ADD KEY `num` (`num`), ADD KEY `tsicod` (`tsicod`); CREATE TABLE IF NOT EXISTS `sinvoicev` ( `num` varchar(15) NOT NULL, `bpcinv` varchar(15) NOT NULL, `bpaadd` varchar(3) NOT NULL, `invtyp` enum('1','2') NOT NULL, `invdat` date NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=''; ALTER TABLE `sinvoicev` ADD PRIMARY KEY (`num`), ADD KEY `bpcinv` (`bpcinv`,`bpaadd`,`invtyp`);
Sur ces tables je dois effectuer une requête pour faire une somme des factures ou avoirs et parfois je dois sortir une somme en ayant soustrait les avoirs.
Pour le moment en php j'ai ce code
afin d'optimiser tout ça je voudrais pouvoir soustraire directement les avoirs lors de la requête et non le faire faire à php. Est-ce possible ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 /* --- bpcord : code client bpaadd : code adresse de livraison annee : annee de recherche mois : mois de recherche, peut être vide pour faire une recherche sur l'année entière tsicod : famille article recherché type : 1 pour facture, 2 pour avoir ---- */ public function getStatsMois($bpcord, $bpaadd, $annee, $mois, $tsicod, $type) { $query = "SELECT MONTH(sinvoicev.invdat) as mois, SUM(sinvoiced.netpri*sinvoiced.qty) AS netpri"; $query .= " FROM sinvoicev"; $query .= " INNER JOIN sinvoiced ON sinvoicev.num = sinvoiced.num"; $query .= " WHERE"; $query .= " sinvoicev.invtyp = '".$type."' AND"; $query .= " sinvoicev.bpcinv = '".$bpcord."' AND"; $query .= " sinvoicev.bpaadd = '".$bpaadd."' AND"; $query .= " YEAR(sinvoicev.invdat) = '".$annee."'"; if(!empty($tsicod)) { $query .= " AND sinvoiced.tsicod = '".$tsicod."'"; } if(empty($mois)) { $query .= " AND MONTH(sinvoicev.invdat) BETWEEN '01' AND '12'"; $query .= " GROUP BY MONTH(sinvoicev.invdat)"; } else { $query .= " AND MONTH(sinvoicev.invdat) = '".$mois."'"; } $result = $this->database->query($query)->fetchAll(PDO::FETCH_ASSOC); if(empty($result[0]['mois'])) { $stat[0]['mois'] = $mois; $stat[0]['netpri'] = 0; } else { $stat = $result; } return $stat; }
Merci d'avance.
Partager