IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] problème avec possible utilisation du IF de SQL


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Points : 336
    Points
    336
    Par défaut [SQL] problème avec possible utilisation du IF de SQL
    bonjour j'ai une requête qui est comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    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.

  3. #3
    Membre averti Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Points : 336
    Points
    336
    Par défaut
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

Discussions similaires

  1. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  2. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  3. Problème avec l'utilisation de la fonction clock
    Par Matgic95 dans le forum C++Builder
    Réponses: 13
    Dernier message: 09/05/2005, 19h27
  4. Access/SQL : Problème avec Count
    Par Taurëndil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2005, 15h49
  5. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo