{MySQL}

Frozy -  
 Frozy -
Bonjour,
j'ai une petite question
j'aimerai faire une requete un peu spéciale
j'ai un tableau contenant l'id d'une personne avec ces différentes régénération de crédit que l'on va appeler table 1
j'ai une deuxieme table contenant toutes les utilisations de ces crédit

j'aimerai en une requete faire un sum de la premiere table du crédit auquel je retire les dépenses de la table deux.

Les deux tables sont reliées par l'id du client

j'ai essayé avec plusieurs méthodes mais cela ne fonctionne pas du style

SELECT
SUM(ccm.creditpreventif) as creditP,
SUM(ccm.creditcorrectif) as creditC,
SUM(m.tpsMPrev) as tpsP,
SUM(m.tpsMCor) as tpsC ,
creditP-tpsP,
creditC-tpsC

FROM client_credit_maintenance ccm, maintenance m WHERE ccm.id_client=m.id_client

si vous avez une réponse merci de bien vouloir me la donner
bonne soirée !
Configuration: Windows 7
Firefox 3.5.4

6 réponses

  1. nb22721 Messages postés 69 Statut Membre 1
     
    bonsoir,
    As tu un message d'erreur quand tu lances ta requête?
    Est il possible que ce soit parce que tu as oubliés des _
    a la place de
    FROM client_credit_maintenance ccm, maintenance m
    ==> FROM client_credit_maintenance_ccm,maintenance_m

    Sinon généralement il faut un group by apres le Where quand on utilise un SUM, Count etc... c'est pour ça que j'ajoute toujours l'id en plus dans le select
    Cordialement.
    0
  2. Frozy
     
    Merci de ta réponse
    j'avais une erreur dans le script du haut mais c etait fait expres pour comprendre le soucis
    Lorsque je fais ceci

    SELECT
    SUM(ccm.creditpreventif) as creditP,
    SUM(ccm.creditcorrectif) as creditC,
    SUM(m.tpsMPrev) as tpsP,
    SUM(m.tpsMCor) as tpsC

    FROM client_credit_maintenance ccm, maintenance m WHERE ccm.id_client=m.id_client

    je n'ai pas d erreur mais les données reçu sont erronée

    creditP creditC tpsP tpsC
    10800 7200 14400 7200

    en faite il me double la valeur de tpsP et tpsC car il existe qu'une seule ligne actuellement dans ma table maintenance et deux dans celle du crédit

    c'est pour cela la syntax est fausse

    je veux biensur au final avoir creditP - tpsP et reditC - tpsC
    j'arrive a le faire en deux requete avec PHP mais j'aimerai decouvrir la syntax pour le faire d'une fois
    0
  3. moderno31 Messages postés 900 Statut Membre 92
     
    Hello
    Pourquoi n'as tu pas fait des jointures?
    Ce serait plus fiable pour le résultat.

    De plus l'opération de soustraire ou d'additionner par exemple, mieux vaut la faire via PHP. Mysql est pas doué pour ça.
    SQL server oui.

    SELECT cm.id_client,
    ,SUM(ccm.creditpreventif) as creditP
    ,SUM(ccm.creditcorrectif) as creditC
    ,SUM(m.tpsMPrev) as tpsP
    ,SUM(m.tpsMCor) as tpsC
    FROM client_credit_maintenance ccm
    LEFT JOIN maintenance m ON m.id_client = cm.id_client
    GROUP BY cm.id_client

    Par contre je n'ai pas bien compris l'esprit de ta requete.
    Maintenance c'est une table qui contient quoi ?
    0
  4. Frozy
     
    Bonsoir

    merci de vos réponses
    en effet j'ai resolu le probleme comme tu l'as dit a l'aide de PHP pour m'en sortir mais je vous savoir si cela était possible étant donne que c'est une opération courante et que je sais la faire sous MSSQL et non pas sous MYSQL ^^.

    Merci pour vos contributions

    Arne
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. moderno31 Messages postés 900 Statut Membre 92
     
    quel est le script SQL de ta solution ?
    ça m'interesse
    0
  7. Frozy
     
    Bonjour voici la solution que j'ai utiliser pour ma problématique :
    function calculniveaumaintenance($id_client)
    {
    $data = mysql_query("SELECT SUM(creditpreventif) as creditP,SUM(creditcorrectif) as creditC FROM client_credit_maintenance WHERE id_client ='".$id_client."'") OR DIE (mysql_error());
    $credit = array(0,0,0,0,0,0);
    if($infos = mysql_fetch_array($data))
    {
    $credits[0] = $infos['creditP'];
    $credits[1] = $infos['creditC'];
    }
    $data = mysql_query("SELECT SUM(tpsMPrev) as tpsP,SUM(tpsMCor) as tpsC FROM maintenance WHERE id_client ='".$id_client."'") OR DIE (mysql_error());
    if($infos = mysql_fetch_array($data))
    {
    $credits[2] = $infos['tpsP'];
    $credits[3] = $infos['tpsC'];
    }

    $credits[4] = $credits[0]-$credits[2];
    $credits[5] = $credits[1]-$credits[3];
    return $credits;
    }

    j'ai décomposer les requetes pour faire plus simple, l'un pour calculer le total de temps de crédit et l'autre pour le temps de crédit utilisé.

    Si cela peut vous aider et si vous avez des améliorations a proposer je suis toujours d'écoute ;)

    bonne journée

    Froz
    0