Soustraction dans PHP de deux colonnes mysql

lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009 - 28 août 2008 à 22:35
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 - 30 août 2008 à 00:31
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

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 août 2008 à 10:01
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...
0
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 12:15
merci beaucoup et pour l'afficher un simple echo $donnees['diff'] ?
0
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 12:28
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)
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 août 2008 à 12:45
    $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...
0

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

Posez votre question
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 12:54
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
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 août 2008 à 16:49
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, ...)
0
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 19:17
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
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 août 2008 à 20:37
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 !)
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 août 2008 à 20:40
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;
0
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 20:58
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
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 août 2008 à 20:58
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;
0
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 21:01
je n'ai pas de table client j'ai un id, type, date, mode, debit et crédit aucune table client
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 août 2008 à 21:02
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;
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 août 2008 à 21:04
zut (faute de frappe) :

$solde = mysql_query('SELECT (SUM(credit)-SUM(debit)) as solde FROM Transaction');
echo 'Votre solde actuel est de '. $solde;
0
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 21:07
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
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 août 2008 à 21:14
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 !!!) ...
0
lymphis Messages postés 21 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 26 août 2009
29 août 2008 à 21:15
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 ^^)
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
30 août 2008 à 00:31
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
0
Rejoignez-nous