{MySQL}

Fermé
Frozy - 5 nov. 2009 à 22:45
 Frozy - 9 nov. 2009 à 12:25
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 !

6 réponses

nb22721 Messages postés 63 Date d'inscription vendredi 22 mai 2009 Statut Membre Dernière intervention 27 octobre 2010 1
5 nov. 2009 à 22:52
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
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
moderno31 Messages postés 872 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
8 nov. 2009 à 18:53
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
moderno31 Messages postés 872 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
8 nov. 2009 à 22:33
quel est le script SQL de ta solution ?
ça m'interesse
0
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