Soustraction dans PHP de deux colonnes mysql

Signaler
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009
-
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
-
bonjour,

voilà je vient de crée un projet à cette adresse: http://www.phpcs.com/codes/COMPTES-DIRECT-V0-ALPHA_47783.aspx

le soucis c'est que ma base de donnée et comme ci dessous (ceci est mon fichier d'installation)
mysql_query(" CREATE TABLE `$base`.`Transaction` (
`id` INT NOT NULL AUTO_INCREMENT ,
`type` VARCHAR( 255 ) NOT NULL ,
`date` VARCHAR( 255 ) NOT NULL ,
`mode` VARCHAR( 255 ) NOT NULL ,
`debit` VARCHAR( 255 ) NOT NULL ,
`credit` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB ");

et donc je souhaiterai savoir si il exister un script PHP qui permettrai de faire debit - crédit et de l'afficher via une commande echo

merci beaucoup de votre aide je suis débutant et c'est dur

18 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Salut,

Tu peux faire une simple requête SQL :

SELECT (sum(credit) - sum(debit)) as diff FROM Transaction;

C'est plus performant de laisser MySQL faire le calcul, que de récupérer tous les enregistrements et de faire la différence.

Avec mysql_fetch_**** tu récupères une ligne (il n'y en aura qu'une), qui ne contient qu'une seule colonne (qui s'appelle diff, mais tu peux l'appeler autrement dans la requête, ça n'a aucune importance : tu peux même ne pas lui donner de nom).

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

merci beaucoup et pour l'afficher un simple echo $donnees['diff'] ?
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

voici mon script actuelle
    <?php

    mysql_connect($mysql, $identifiant, $mdp)or die("Impossible de se connecter au serveur Mysql");

    mysql_select_db($base) or die("Impossible de se connecter à la base de donnée");
    $solde = mysql_query("SELECT (sum(credit) - sum(debit)) as diff FROM Transaction");
    echo "Votre solde actuel et de $solde";

    $reponse = mysql_query("SELECT * FROM Transaction");

    while ($donnees = mysql_fetch_array($reponse) )

    {

    ?>



    <?php echo $donnees['type']; ?>


    <?php echo $donnees['date']; ?>


    <?php echo $donnees['mode']; ?>


    - <?php echo $donnees['debit']; ?>€


    + <?php echo $donnees['credit']; ?>€



     
    <?php

    }

    mysql_close();

    ?>

sa me met "Votre solde actuel et de Resource id #3"

merci de votre aide (et si on peu editer dite moi comment je ne sais pas du tout donc désoler)
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
    $solde = mysql_query("SELECT (sum(credit) - sum(debit)) as diff FROM Transaction");
    echo "Votre solde actuel et de $solde";

Euh... un petit tour sur la doc de PHP pour bien comprendre comment fonctionne fonctionnent les fonction mysql_*
mysql_query() retourne une resource de type 'mysql result'
Un résultat mysql peut être lu avec une des fonction mysql_fetch_* et mysql_result()

$result = mysql_query('SELECT (SUM(credit) - SUM(debit)) AS solde FROM Transaction');
$solde = mysql_result($result, 0, 'solde');
echo 'Votre solde est de : ' . $solde;

Sinon, évite de parcourir tous les enregistrements, parce que si tu en as 3000 dans ta table, ça va être très lourd, questions performances. Pense à afficher sur plusieurs pages.

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

je te remercie beaucoup, j'utilise le site du zero et un livre et j'ai jamais vu comment faire une sosutraction

ben je vais apprendre la methode merci de ton aide
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
Bonjour,
SUM (Transact-SQL) :
http://msdn.microsoft.com/fr-fr/library/ms187810.aspx

Attention : tu as défini tes champs "debit" et "credit" en VARCHAR
Tu aurais dû les déclarer en "numerique" (INT, DECIMAL, ...)
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

merci beaucoup jreaux62

je penser à les changer mais avant je doi faire un script php pour verifier que les champ des montant sont bien rempli avec un nombre entier ou decimal (sa je sais le fait avec mon livre)

merci bien ;)

en tout cas via ton lien sa explique pas très bien je pense chercher un tuto qui explique mieu car la c'est trop vaste
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
Rebonjour,
A mon avis, ce que tu veux faire (pour chaque id) c'est juste
solde = (credit - debit) :

$solde = mysql_query("SELECT (credit - debit) as solde FROM Transaction");
echo "Votre solde actuel est de $solde";


NB : SUM(machin) fais la somme de toutes les valeurs de la colonne "machin"
(ce n'est pas ce que tu veux faire !)
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
La syntaxe exacte est :
($id est l'id de la personne concernée)

$solde mysql_query('SELECT (credit - debit) as solde FROM Transaction WHERE id '. $id);
echo 'Votre solde actuel est de '. $solde;
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

non à la base je veux que sa le fasse pour toute mes transaction (que j'en ai 10 ou 60) par exemple en mettant ma paye et toute mes dépense j'ai un solde qui m'indique combien il me reste
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
PARDON!
Après re-lecture de ta question, j'ai un gros doute !
Comment relies-tu la transaction au client ??

- as-tu une autre table "Client" ?
avec un champ `idclient` INT NOT NULL AUTO_INCREMENT ?
Auquel cas, il faudrait rajouté dans la table "Transaction" un champ :
`idclient` INT NOT NULL

Et le solde total (avec $idclient l'id du client) est obtenu avec :

$solde mysql_query('SELECT (SUM(credit)-SUM(debit)) as solde FROM Transaction WHERE idclient'. $idclient);
echo 'Votre solde actuel est de '. $solde;
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

je n'ai pas de table client j'ai un id, type, date, mode, debit et crédit aucune table client
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
Si la table "Transaction" ne concerne QU'UN SEUL client (toi !), alors s'était bon !

$solde = mysql_query('SELECT (SUM(credit)-SUM(debit)) as solde FROM Transaction';
echo 'Votre solde actuel est de '. $solde;
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
zut (faute de frappe) :

$solde = mysql_query('SELECT (SUM(credit)-SUM(debit)) as solde FROM Transaction');
echo 'Votre solde actuel est de '. $solde;
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

oui à la base c'est un programme que je vais distribuer en Open GL (si c'est bien sa le nom) que chacun installera sur son FTP (ou en local) pour faire ses comptes, mais pourquoi pas un portail communautaire pour faire ses comptes mdr
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
C'est pour ca que j'ai parlé de table "client" et "idclient" :
Ca permet de gerer plusieurs clients avec la meme base de donnees.

(possible aussi chez toi ! : ton compte, celui de ta femme, l'argent de poche des enfants !!!) ...
Messages postés
21
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
26 août 2009

ha oui pas mal, mais bon pour le moment je sais faire des formulaire d'enregistrement mais pas de connection donc sa c'est pour plus tard (hé oui je suis nul en php ^^)
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
Un excellent site et de très bons tutos : http://www.asp-php.net

"Connexion à une base, ..." :

http://www.asp-php.net/tutorial/asp-php/connexion.php