Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/02/2008, 16h33   #1
Membre éclairé
 
Avatar de mdr_cedrick
 
Développeur multimédia
Inscription : janvier 2008
Messages : 375
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : janvier 2008
Messages : 375
Points : 305
Points : 305
Par défaut [SQL] problème avec possible utilisation du IF de SQL

bonjour j'ai une requête qui est comme ceci

Code :
1
2
3
4
5
6
"SELECT f.id as id, LTRIM(f.raison_sociale) as raison_sociale, SUM(ff.montant_ht) as total_ht, SUM(ff.montant_ttc) as total_ttc, ff.facture_avoir
FROM ".FOUR." f
LEFT JOIN ".FACTURE_F." ff ON ff.fournisseur=f.id AND ff.date LIKE '".$annee."%'
where f.type='3' AND f.type_f='1' 
GROUP BY f.raison_sociale
ORDER BY ".$orderBy
mon problème vient du fait que SUM(ff.montant_ttc) indiquera un nombre positif car tous mes champs montant_ttc sont positifs
or le champs ff.facture_avoir qui peut contenir 0 ou 1 indique s'il est à 1 que c'est un avoir et donc la ligne concerner doit être soustraite
prenons un exemple

MONTANT / FACTURE_AVOIR
10 / 0
5 / 0
12 / 1
8 / 0

je devrais trouver 23
or je trouve 35 (ce qui est normal)

comment puis-je faire dans ma requête pour calculer correctement cela

merci d'avance
mdr_cedrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 16h57   #2
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
Bonjour,
au lieu d'utiliser FACTURE_AVOIR avec 0 et 1, pourquoi ne pas avoir mis -12 dans la colonne montant? Avec cette méthode, plus de problème avec le SUM.

Je pense qu'on peut y arriver avec des tables temporaires mais est ce vraiment nécessaire? On vous contraint à utiliser des UNSIGNED?

Cordialement,
DaRiaN.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 17h02   #3
Membre éclairé
 
Avatar de mdr_cedrick
 
Développeur multimédia
Inscription : janvier 2008
Messages : 375
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : janvier 2008
Messages : 375
Points : 305
Points : 305
oui en fait je dois ré-arranger un petit module qui est sur un gros projet avec des tables énormes
j'ai fais ce calcul en 2 requêtes distinctes mais mon patron voudrait une seule requête
alors je ne sais pas trop comment faire

pour le moment ça fonctionne de toute façon mais ce n'est pas ce qu'il veut
mdr_cedrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 19h12   #4
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
Ah, je viens de relire votre premier post. Moi, je pensais que vous vouliez soustraire 12 du total. Pour moi, le SUM de votre exemple devait retourner 11 et non 23.

Sinon, je vous aurai bien invité à faire une horrible requête comme celle-ci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT SUM(`montant`)
 FROM 
 (
  SELECT `montant` 
   FROM `t` 
   WHERE `avoir` = 0 
  UNION 
  SELECT -`montant` 
   FROM `t` 
   WHERE `avoir` = 1
 ) 
 tmp
;
Mais là, ce n'est pas trop d'actualité.

En fait, vous ne voulez dans votre résultat que "WHERE FACTURE_AVOIR = 0". Cela doit être faisable, pourriez-vous me montrer le schéma des tables concernées par cette requête?
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h30.


 
 
 
 
Partenaires

Hébergement Web