[RESOLU] table sous forme de variable qui me met en erreur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] table sous forme de variable qui me met en erreur

Re: table sous forme de variable qui me met en erreur

par juvamine » 02 oct. 2016, 20:51

merci l'ami pour toute ces aides
ça fonctionne impec.

Re: table sous forme de variable qui me met en erreur

par moogli » 30 sept. 2016, 15:38

dasn le premier cas tu as les colonnes TOTAL et typeOperation

dans le second la colonne delta
c'est ce que tu récupère quand tu "fetch"

@+

Re: table sous forme de variable qui me met en erreur

par juvamine » 30 sept. 2016, 15:20

ok merci pour l'info.
j'ai bien comparer les deux requêtes avec phpmyadmin ça fonctionne bien en effet.
en revanche je pas bien comment récupérer tout ça avec PDO.

Re: table sous forme de variable qui me met en erreur

par moogli » 30 sept. 2016, 15:13

pour le sql sqlpro.developpez.com

pour la date deux champs dates, la date d'enregistrement / mise à jour d'un champs fait partie des données d'audit d'une table.
en générale
date création
utilisateur creation
date dernière mise à jour
utilisateur dernière mise à jour

comme ça tu as rapidement une idée de qui créé et qui modifie.

Dans ton cas tu rsique d'être seul du coup juste la date de saisie (un peu comme un virement date de demande et date de valeur où il sera effectué ;) )

@+

Re: table sous forme de variable qui me met en erreur

par juvamine » 30 sept. 2016, 15:04

les colonnes jour, mois et année c'est pour si je dois enregistré une transac à une date antérieur par exemple car dans le champ dateOperation il s'enregistre à la date du jour genre CUREDATE() non? sauf si tu connais un autre moyen je suis preneur ;)

Re: table sous forme de variable qui me met en erreur

par juvamine » 30 sept. 2016, 14:35

yes merci :)
je ne savais pas que pouvait des calculs en sql. si tu as un bon site qui peux m'en apprendre d'avantage je suis preneur. :)
j'ai bien comparer les deux requêtes avec phpmyadmin ça fonctionne bien en effet.
en revanche je pas bien comment récupérer tout ça avec PDO.

Re: table sous forme de variable qui me met en erreur

par moogli » 30 sept. 2016, 11:26

donc,
avec ta table et les données suivantes
INSERT INTO `detail` (`id`, `jour`, `mois`, `annee`, `dateOperation`, `typeOperation`, `description`, `fixe`, `t`) VALUES (1, '', '', '', '2016-09-30', 'd', 'gfgf', '0', 42.00);
INSERT INTO `detail` (`id`, `jour`, `mois`, `annee`, `dateOperation`, `typeOperation`, `description`, `fixe`, `t`) VALUES (2, '', '', '', '2016-09-30', 'd', 'trtrtr', '0', 1337.00);
INSERT INTO `detail` (`id`, `jour`, `mois`, `annee`, `dateOperation`, `typeOperation`, `description`, `fixe`, `t`) VALUES (3, '', '', '', '2016-09-30', 'c', 'rtyhtyt', '0', 2000.00);
je récupère les recettes et dépence du mois avec cette requête
SELECT  SUM(t) AS TOTAL, typeOperation FROM detail  WHERE month(dateOperation) = 9 group by typeOperation;
résultat

Code : Tout sélectionner

TOTAL | typeOperation 1379.00 | d 2000.00 | c
du coup, delta sur le mois 2000-1379 = 621.

tu veux tout en une requête (gourmand)
select 
(SELECT  SUM(t)  FROM detail  WHERE month(dateOperation) = 9 and typeOperation = 'c') -
(SELECT  SUM(t) FROM detail  WHERE month(dateOperation) = 9 and typeOperation = 'd')
as delta
delta = 621.00

L'avantage de la première requête c'est que tu peux afficher la somme des recettes et crédits et le delta au besoin.

Pour le solde réel il faut faire sauter la clause sur le mois pour prendre en compte toutes les opérations.


au passage, les colonnes jour, mois, année sont inutiles (y a la date et on l'info simplement avec les mots clef sql comme month, year etc).


@+

Re: table sous forme de variable qui me met en erreur

par juvamine » 30 sept. 2016, 10:55

CREATE TABLE IF NOT EXISTS `detail` (
`id` int(11) NOT NULL,
`jour` text NOT NULL,
`mois` text NOT NULL,
`annee` text NOT NULL,
`dateOperation` date NOT NULL,
`typeOperation` enum('d','c') NOT NULL,
`description` text NOT NULL,
`fixe` enum('0','1') NOT NULL,
`t` decimal(10,2) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

Re: table sous forme de variable qui me met en erreur

par moogli » 30 sept. 2016, 10:39

ah j'ai pas été clair :-)
c'est la structures de la table (create table) qui m’intéresse ;)

@+

Re: table sous forme de variable qui me met en erreur

par juvamine » 30 sept. 2016, 09:35

bonjour bonjour :)
la table actuel est detail.

Re: table sous forme de variable qui me met en erreur

par moogli » 30 sept. 2016, 08:14

c'est quoi la table actuellement ?

la requête que je t'ai indiqué fait ce que tu demandes et retourne deux lignes (une pour chaque type d'opération,, tu fais la différence et tu as le delta sur le mois.
Par contre, effectivement sans le solde il faut faire le calcul depuis le début (donc virer le prédicat) et faire la différence crédit - débit, si c'est négatif t'es dans le rouge XD

@+

Re: table sous forme de variable qui me met en erreur

par juvamine » 29 sept. 2016, 23:38

re-salut
la req ne fonctionne pas.
je dois m'y prendre très mal.
je te donne mon ptit bout de code pour que tu comprennes ce que je veux faire.
le but est de récupérer le total (t) des débit (typeOperation(d)) et crédit (typeOperation(c)) pour connaître ce qui reste sur le compte

Code : Tout sélectionner

//-----------MANQUE A TROUVER LA BONNE REQ LOL------------- //ancienne req foireuse de ma part=>$query=$db->prepare("SELECT SUM(typeOperation)=c AS TOTAL AND SUM(typeOperation)=d AS TOTAL FROM detail WHERE mois=9 AND annee=:annee"); //ta req=>$query=$db->prepare("SELECT SUM(t) AS TOTAL, typeOperation FROM detail group by typeOperation WHERE mois=:mois AND annee=:annee"); //$query->bindValue(':c', $c, PDO::PARAM_STR); //$query->bindValue(':d', $d, PDO::PARAM_STR); //$query->bindValue(':mois', $m, PDO::PARAM_STR); //$query->bindValue(':annee', $a, PDO::PARAM_STR); //$query->execute(); //$rest=$c-$d; //----------------------------------------------------- echo'<table> <tr><td>total crédit</td><td>total débit</td><td>restant</td></tr> <tr><td>'.$c.'</td><td>'.$d.'</td><td>'.$rest.'</td></tr> </table>'; //-----------
les champs concernés sont comme ceci:
typeOperation=>enum('d','c')
t=>decimal(x,2)

Re: table sous forme de variable qui me met en erreur

par moogli » 29 sept. 2016, 16:10

salut,

oula oui c'est pas du sql de compete ça !!
il faut tester (toujours) ses requêtes dans un client sql dans ce genre de cas

La il te faut utiliser group by (c'est fait les fonctions de groupe comme sum ou count)
SELECT  SUM(lacolonnequivabienQuicontientLesMontants) AS TOTAL, typeOperation FROM detail group by typeOperation WHERE mois=:mois AND annee=:annee
et du coup j'ai mis le mois en paramètre ;-)~
comme ça tu va avoir une somme pour chaque type d'opération.

@+

Re: table sous forme de variable qui me met en erreur

par juvamine » 29 sept. 2016, 15:26

salut à tout :)
bon tout se passe bien pour l'avancement de ce projet d'ailleurs bientôt fini.
j'ai juste un problème de calcul sur le champ 'typeOperation' de la valeur c et d pour calculer le restant sur le compte.
j'ai fait une requête du genre

Code : Tout sélectionner

$query=$db->prepare("SELECT SUM(typeOperation)=c AS TOTAL AND SUM(typeOperation)=d AS TOTAL FROM detail WHERE mois=9 AND annee=:annee"); $query->execute(array('c'=>$c,'d'=>$d,'annee'=>$a)); $data=$query->fetch();
et ça me met ça comme message d'erreur
Notice: Undefined variable: c in /home/juju/www/test/liste_mois.php on line 210
Notice: Undefined variable: d in /home/juju/www/test/liste_mois.php on line 210
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in /home/juju/www/test/liste_mois.php:210 Stack trace: #0 /home/juju/www/test/liste_mois.php(210): PDOStatement->execute(Array) #1 {main} thrown in /home/juju/www/test/liste_mois.php on line 210
donc ma requête n'est pas bonne
pouvez-vous m'aider sur cette requête?

Re: table sous forme de variable qui me met en erreur

par moogli » 27 sept. 2016, 09:08

@Ryle : wé c'est pas con, moi j'ai fait une table pour le casoù XD ceci dit l'enum suffit et est parlante.

@juvamine : mais de rien :)
pour le reste faut voir en fonction des besoins, mais plus tes tables collent aux données et non au métier moins tu te fait chier.
si tu as des dépense récurrente rien ne t'empeche de coder un cron qui les ajoutes (genre une table qui stocke les récurences (image de celle des dépences) et en début de chaque moi un cron qui copie de l'une vers l'autre avec le bonne date ;)

c'est une idée parmis pas mal d'autre