Vous n'êtes pas identifié(e).
OK, pour la déclaration de variable, je ne savais pas que c'était juste de l'information..
Pour ta note, oui je suis d'accord que le résultat sera null, mais c'est pour ca que j'avais tester différente chose, y compris ca :
IF somme_mise_perdant = null THEN SET gain_du_joueur = somme; END IF;
pour faire un forcage en cas de null, mais ca ne fonctionne pas.
Sinon, pour le contrôle de type de variable et de leur contenu, tu ferai quoi de plus que ce que j'ai écris?
Merci
Et oui bonne fin de weekend de paques (et vive le chocolat!)
Bonjour,
Outch ca fait mal, je pensais que c'était pas mal fait pourtant.
Le controle de type de variable est fait pourtant, non? il y a le INT dans la déclaration de variable
Pour le controle de NULL, j'ai rien trouvé et je suppose que isset existe pas.
Sinon ce qu'on pourrait faire pour amélioré c'est rajouter la valeur par défaut :
DECLARE gain_du_joueur INT DEFAULT 0;
DECLARE gain_a_repartir INT DEFAULT 0;
Mais à part ca je ne vois pas quoi.
Et non, le résultat de la formule n'est pas négatif
A+
Bonjour,
J'ai un truc que je m'explique pas avec ma procédure stocké.
Quand sous phpmyadmin, je fais : SELECT calc_gain_parieur( 5000, 5000, NULL , 5, 5 ) le résultat qui s'affiche est NULL.
Alors que je ne veut pas, et d'après mon code, ca ne debvrait pas (enfin j'ai du me tromper sur qqchose.
DECLARE gain_du_joueur INT;
DECLARE gain_a_repartir INT;
IF employe_gagnant = id_employe THEN
SET gain_a_repartir = somme_mise_perdant - (somme_mise_perdant*10/100);
SET gain_du_joueur = (gain_a_repartir * somme / somme_mise_gagnant) + somme;
IF somme_mise_perdant = 0 THEN SET gain_du_joueur = somme; END IF;
END IF;
IF employe_gagnant != id_employe THEN
SET gain_du_joueur = 0 ;
END IF;
RETURN gain_du_joueur;
END##
Une idée?
Merci
Salut,
Une bonne année à toi aussi
Pour le LEFT, j'ai finalement compris ou tu voulais que je le met, en tombant sur une de mes requêtes ou j'en avait fait un...
Pour ma table suivi, je vois un peu ce que tu veux dire, mais j'ai du mal a voir ce que ca changerai par rapport a ma table, ca ne ferai que peu de différence je trouve, ou alors j'ai mal compris.
Merci en tt cas pour toujours me répondre
Je suis désolé JC, mais je n'arrive pas a placer ton LEFT dans la requete...
Mes tests ne m'ont retournés que des erreurs, et j'ai pas trouvé d'exemples sur google...
Si tu pouvais me montrer stp
Merci
Edit du 20/12
En fait on a oublié un GROUP BY dans les select des left join, car sinon il faut un group_concat de toute les dates sur 1 seul et meme enregistrement,
donc ca c'est mieux :
Ensuite, de voir une facture avec une date de paiement effectué et avec un montant payé de 0 est l'illustre conséquence pourrait-on dire de tout ce que je viens de dire précédemment. A moins qu'il y ait un client qui s'est amusé à faire un chèque de zéro euro en paiement, ca fait tâche, et ca remet encore une fois en question la qualité et la consistance des données.
En fait, l'idée c'est que si le client ne paye pas tout d'un coup, on pouvait indiqué la somme payé et la date du 1er payement
Pour tes deux lignes, je pense que tu es victime de ton modèle, en ayant utilisé la table de suivi comme d'un log action sur les factures. Ca te démontre aussi vu que le doc peut être envoyé plusieurs fois à des dates différentes, qu'il n'est pas pertinent d'en afficher la date d'envoi dans ton tableau contrairement à un nombre d'envoi par exemple.
Je ne vois pas comment j'aurai pu créé la table suivi d'un autre manière, mais si tu as une idée je veux bien la connaitre.
Oui ça montre que le doc peut être envoyé plusieurs fois. Et là ou c'est pertinent, c'est de savoir quand/comment/a qui il a été envoyé. Pour prendre un exemple concret, imagine que tu relances un client pour une facture non payé et qu'il te dise "non je n'ai rien reçu", avec ma table suivi, tu saura quand, comment et a qui tu l'as envoyé, c'est ça le but. Donc dans mon tableau de récapitulatif de suivi, il n'est intéressant que de savoir si ça été envoyé ou non. A partir du moment ou ça été envoyé 1 fois, c'est que tu as fait ton boulot.
Je vais essayer de faire une requete avec les éléments que tu m'a fourni.
(edit de 17h32)
Avec la requete :
Ca fonctionne, j'ai en effet plus qu'une ligne. en plus j'ai utilisé group_concat que je n'avais jamais utilisé
Par contre je n'ai pas saisi ce que je devais faire avec le LEFT de la requete principale, surtout vu que ca fonctionne là?
(fin du edit de 17h32)
Sinon, pour InnoDB et les modif que j'ai effectué :
Sur ma table fact_suivi, j'ai donc relié mon id_facture a celui de la table fact_facture.
Pour le ON DELETE tu me conseilles de mettre CASCADE j'imagine?
ET pour le ON UPDATE, je pense qu'il ne faut rien mettre ?
Merci
Salut,
J'avais fait la correction des INT(10), mais a priori l'erreur était peut etre du a une facture qui n'existait plus dans la table fact_facture mais dont le suivi était toujours là.
Oublie la phrase que tu n'as pas compris, on va parti sur des copie d'écran.
Pour la requete :
J'obtient ca en résultat :
2 lignes pour la factire id 13, alors qu'il m'en faudrait que 1 (si j'enleve le group by date, j'ai plus qu'une ligne, mais le prixFacture est alors de 24.84..
Car dans la table fact_suivi j'ai :
--
-- Contenu de la table `fact_suivi`
--
INSERT INTO `fact_suivi` (`id_suivi`, `id_facture`, `date_send`, `who_send`, `how_send`, `stype`) VALUES
(13, 13, '2012-12-06', 'tata', 'courrier', 1),
(30, 13, '2012-12-12', 'toto', 'mail', 2),
(33, 13, '2012-12-17', 'titi', 'fax', 2);
--
-- Contraintes pour les tables exportées
--
--
-- Contraintes pour la table `fact_suivi`
--
ALTER TABLE `fact_suivi`
ADD CONSTRAINT `fact_suivi_ibfk_1` FOREIGN KEY (`id_facture`) REFERENCES `fact_facture` (`id_facture`);
Si ça peut aider, je peux te donner un accès a phpmyadmin..
Merci
Salut,
J'ai fait des modif sur mes tables. j'ai changé type en stype, j'ai tout passé en InnoDB, créé un lien entre id_facture de la table fact_prestation et fact_facture et je voulais faire de même entre le id_facture de la table fact_facture et fact_suivi, mais ca me génère un erreur (que je n'arrive pas a résoudre). Est ce que l'on peut faire une contrainte de clés étrangères sur un champ qui est le meme sur plusieurs enregistrement?
Sinon pour ta requete : elle fonctionne (et me retourne le bon prixFacture) seulement si je n'ai que 1 ligne avec stype=1 et stype=2. si j'ai plusieurs lignes prixfacture n'est plus correcte. J'ai essayé plusieurs choses, (même des trucs idiots genre rajouter un LIMIT 1 dans les sous requete...) mais ca ne me donne toujours rien de bon
Pour la date, on s'en fout un peu en fait (si c'est la 1ere date ou juste testé si la date existe), mais c'est plus cohérent la 1ère date
Pour la tva, c'est la tva belge : 0, 6 ou 21% donc ca va TINYINT non?
Sinon pour info, que la facture ai 1 ou plusieurs prestations, le prixFacture n'est pas bon
Exemple
table fact_facture :
id_facture id_client id_membre numero_facture date_facture date_echeance date_payement montant_paye provenance prestataire note
13 123 1 2012/80 2012-10-29 2012-11-03 2001-01-01 12.00 Notaire derb Iso-peb test
Table prestation
id_prestation id_facture type autre date_prestation adresse cp ville pays quantite prix_htva tva
10 13 14 2012-11-26 Rue Verte, 999 7000 Mons Belgique 1.0000 2.0000 21
11 13 12 2012-12-15 Rue l\'Averte, 999 7000 Mons Belgique 1.0000 10.0000 0
Table suivi (ici 2 envois de facture et 0 de doc):
id_suivi id_facture date_send who_send how_send type
4 13 2012-12-01 A toto 3 1
5 13 2012-12-01 au pape 2 1
Merci
Dans ta modélisation actuelle donc, quel est le critère qui doit être retenu en interne pour dire parmi x dates d'envoi quel est la date qui doit être considérée comme étant la date d'envoi officielle pour la facture? Si c'est la dernière, ton MAX est justifié, si c'est la première, ton MAX est faux. Si en interne il suffit de vérifier qu'une date d'envoi existe pour dire qu'elle a été envoyée, alors tu peux t'en sortir avec ta modélisation actuelle et adapter ta requête en conséquence.
C'est en effet la 1ère date qui m'intéresse, donc pas de max, ok.
Et oui il me suffit d'avoir 1 date pour dire que c'est envoyé.
Mais pour ce qui est de la récupération de date, ca fonctionne, ce qui ne fonctionne pas correctement, c'est le montant de prixFacture qui est doublé, triplé, a priori en fonction du nombre d'enregistrement dans la table suivi. Je vais continuer a travailler dessus.
Et pour le reste, ce qui ne me parlait pas était juste le terme : 3FN
Merci JC
Bon dimanche à toi.
Oula, il y a des termes que je lis pour la 1ere fois je vais aller me documenter un peu...
Et pour ta question :
- dans la table fact_facture : OUI 1 seul enregistrement par facture
- dans la table fact_suivi : NON, pas toujours. En principe il doit y avoir au minimum 2 enregistrements (1 pour la facture et 1 pour le doc), mais il est possible (dans 20% des cas) de trouver plusieurs ligne pour le doc (ou la facture) si celui-ci a été envoyé plusieurs fois (pour plusieurs personne par exemple)
Merci
Oui il y a avoir plusieurs enregistrement dans la table suivi pour la meme facture (en principe quand c tout bien fait il y a a minimum 2 ligne : 1 facture et 1 doc). Si il y a 4 envoie de doc, c'est comme si il y en avait que 1 seul. 1 ou plus c'est quand meme 1 ^^
Humm j'ai du mal a saisir ta 2eme requete. Il est possible que le MAX n'était pas très utile, mais la impossible d'avoir l'information de la date d'envoie de ma facture (s1.type=1) et en meme temps la date d'envoie du doc (s1.type=2)
J'en profite pour te glisser le code d'affichage du résultat de la requete :
je vais au lit
Bye
Ah... ca te plait pas comme bdd? qu'est ce qui te convient pas? qu'est ce qui doit être amélioré?
La requete telle qu'elle ne passe pas, il ne connais pas date_send_fact et date_send_doc dans le where. En remplacant le where par un having, ca passe sans erreur, mais ca ne ressort qu'une ligne... je fais des tests, mais j'arrive pas a adapté ta requête pour qu'elle ressorte ce que j'ai besoin, je continu
Oui la table fact_facture ne contient qu'1 seul enregistrement par facture.
Pour le reste j'ai pas tout compris, donc je colle mes table pour déjà etre sur que tu es sur la bonne voie
CREATE TABLE IF NOT EXISTS `fact_prestation` (
`id_prestation` INT(11) NOT NULL AUTO_INCREMENT,
`id_facture` INT(11) NOT NULL,
`type` tinyint(3) UNSIGNED NOT NULL,
`autre` text NOT NULL,
`date_prestation` DATE NOT NULL,
`adresse` text NOT NULL,
`cp` INT(10) NOT NULL,
`ville` VARCHAR(50) NOT NULL,
`pays` VARCHAR(50) NOT NULL,
`quantite` DECIMAL(6,4) NOT NULL,
`prix_htva` DECIMAL(10,4) NOT NULL,
`tva` tinyint(4) NOT NULL,
UNIQUE KEY `id_prestation` (`id_prestation`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
CREATE TABLE IF NOT EXISTS `fact_suivi` (
`id_suivi` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_facture` INT(10) UNSIGNED NOT NULL,
`date_send` VARCHAR(10) NOT NULL,
`who_send` VARCHAR(50) NOT NULL,
`how_send` VARCHAR(50) NOT NULL,
`type` tinyint(3) UNSIGNED NOT NULL,
UNIQUE KEY `id_suivi` (`id_suivi`),
KEY `id_facture` (`id_facture`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;
voilà...
Merci pour ton aide mémoire
Pour le AS c'est vrai que je le met quasiment toujours, même si là je l'ai oublié pour les tables. Sinon, si mysql gère aussi quand tu ne met pas le AS, mais j'aime bien le mettre, c'est plus clair au niveau du code, je suis d'accord.
Donc ca donnerai :
Pour le HAVING et ce que je souhaite, c'est simple pourtant, disons que ce tableau de suivi de facture permet de :
- voir si la facture a été envoyé
- ou voir le le doc a été envoyé
- ou voir si la facture a été payé
Mais que ce soit le "problème" de AS ou de Having, le résultat de prixFacture bizarre ne s'explique pas
(pour info j'ai aussi tester ma requête sans le having, et prixFacture est tjs aussi bizarre)
Edit :
Par contre, après d'autres tests, j'ai remarqué que si dans ma table fact_suivi, je n'ai aucun enregistrement, ou 1 seul, la valeur de prixFacture sera bonne, et elle devient fausse quand j'ai 2 ou plus d'enregistrement. (pour 2 enregistrement, prixFacture est en fait le double de la valeur qu'il devrait avoir)
Salut,
Dans mon 1er post, Kris me disait juste de mettre f.montant_paye <= prixFacture dans le having à la place du where, mais il ne me disait pas de mettre SUM( (p.prix_htva + ( (p.prix_htva * p.tva) /100 ) ) * p.quantite) à la place de prixFacture, enfin si j'ai bien compris.
Donc ça donnerai la requête suivante :
Pour mon having, j'ai du mal a comprendre ta proposition, car j'ai besoin de voir toutes les factures dont au moins 1 des 3 actions (payement, envoie de facture et envoie de doc) ne sont pas effectuées. Donc si le client n'a rien payé, ça doit être listé alors que si je met (f.montant_paye >0 AND f.montant_paye <= prixFacture) ca ne listera rien, non?
Pour visualisé un peu mon tableau d'affichage, ca donne qqchose du genre :
Facture Payé Facture envoyé Doc envoyé
31 OK OK NOK
13 OK NOK NOK
58 NOK NOK NOK
Sinon voici une exemple de résultat de la requête actuelle :
id_facture montant_paye prixFacture date_send_fact date_send_doc
31 716.00 2860.260920000000 2012-12-09 2012-12-09
13 12.00 7.260000000000 2012-12-01 NULL
Et ce que je devrais avoir :
31 716.00 715.065230000000 2012-12-09 2012-12-09
13 12.00 2.420000000000 2012-12-01 NULL
Voila,
Merci
Bonsoir
Je reviens avec ma requête fini.. enfin je croyais
Elle fonctionne, pas d'erreur, mais les valeurs obtenu pour prixFacture ne sont pas correctes.
Voici la requête :
J'ai des valeurs bizarre (et pour le moment inexpliqué) pour prixFacture.
Si je simplifie la requête a ça, je n'ai plus de soucis :
Mais ce n'est pas ce que j'ai besoin... une idée de ce qu'il se passe? On dirait que la requete boucle ce qui fait grimper la valeur de prixFacture
Merci pour votre aide
Yves
Humm tu me donnes des idées, faudrait tester.
Mais ce que je voulais faire, c'est lister toutes les factures pour lesquelles une ou plusieurs étapes n'avaient pas été faite et donc avoir une requete du genre :
Mais si la facture n'a pas d'enregistrement dans la table fact_suivi, ca ne me ressort rien du coup..
En fait c'est un table qui permet de faire le suivi d'une facture.
Elle contient des informations comme : date d'envoi de la facture, méthode d'envoi, a qui elle a été envoyé, date d'envoi du doc complémentaire, etc...
L'enregistrement correspondant a une facture n'existe qu'a partir du moment ou le membre a renseigné (via un formulaire) l'une de ses informations (cad qu'il a déja commencer a faire le suivi).
"date_send_fact" et "date_send_doc" sont au format varchar(10).
DOnc en faite, ce que je veux faire, c'est afficher un tableau qui contient les informations suivante :
numéro de facture, la date d'envoie de la facture, la date de payement (contenu dans la table facture donc pas de soucis) et la date d'envoi du doc
Mais si les 3 champs date contiennent qqchose (ce qui veut donc dire que le suivi est complet), il n'est pas necessaire d'afficher la ligne de la facture.
Est ce que je suis plus clair?
Merci
Je reviens avec une autre question sur une requete similaire :
La requete fonctionne bien, cependant, j'aimerais afficher que les résultats qui pour date "date_send_fact" et "date_send_doc" vide
Facile me direz vous, mais non, car ces champs sont des la tables fact_suivi et il est possible qu'il n'existe pas... et si il n'y a pas d'enregistrement il ne me les affiches pas (alors que si ils sont vides ou inexistant, pour moi c'est la meme chose)
Une idée svp?
Merci
Yves
Ah oui c'est vrai, le having
Je ne l'utilise jamais (a tort peut etre)
Merci je vais tester ca (et merci pr les petites astuces/infos)
Bonjour,
J'ai essayer de faire un titre clair, mais pas sur que ce soit le cas ^^
En fait, j'ai besoin de faire une requete qui me permet d'afficher les factures qui n'ont pas été payées (ou pas complètement).
J'ai une table facture qui contient entre autre le montant que le client a deja payé.
Le prix de la facture n'existe pas tel quel. Il est obtenu a partir de la somme des cout des prestations lié a la facture (chaque prestation est dans la table prestation).
L'idée pour afficher les factures non payées est donc de comparer le prix payés par le client aux totales des couts des prestation.
Est ce que l'on peut faire ca en 1 requetes?
Voila ce que j'ai essayer de faire, tout en sachant que ca ne fonctionnerait pas...
Merci pour vos idées
Bonjour,
Par manque de temps, je cherche quelqu'un qui serait capable de me développer en php/ajax un module allopass qui puisse être intégrer à mon site.
Le travail ne concerne que le développement pur, je m'occuperai du css.
Il faut donc une première page avec :
- affichage des différents pays supporter et des différents mode de payement (ici utilisation de l'ajax pourquoi pas)
- formulaire pour que le membre puisse indiquer le code allopass obtenu
Une deuxième page :
- vérification du code allopass chez allopass (via leur api)
- si code ok alors "ca travaillerai et sauvegardera en bdd le code -> boulot pour moi ca)
- si code no ok, alors msg d'erreur "mauvais code" + msg d'erreur de chez allopas
Il faut biensur que le script fonctionne sur des pages avec des sessions
PS : si besoin, j'ai la doc allopass sur les api en anglais
Si vous etes inetressé, merci de me contacter via cette interface de ticket : http://support.attitude-web.fr/index.php?a=add
Merci
Yves
Bonjour,
J'ai essayer plusieurs méthodes, qui ne me donne pas ce que je souhaite, donc me voila...
Voici un copie d'écran d'un certain enregistrement de ma table. pour simplifier j'ai deja fait un GROUP BY nombre, mais dans la table il y en a plein plein plein
Ce que je souhaite faire, c'est calculer le temps entre le status résolu et Fermé.
MAIS, il faut seulement prendre "comme départ" l'avant dernier résolu, car il peut y en avoir d'autre avant (pour le meme dossier (=nombre) ).
Le dernier status résolu est en principe tjs d'une durée tres petite (inférieur a 10secondes)
closedtotal correspond a la durée en second du status
ce que j'ai essayer de faire :
Dans un 1er temps je prendre le nombre et le closedtotal du dernier enregistrement au status résolu, qui est "significatif" :
Et ensuite je pensais faire la somme de closedtotal de tous les enregistrement qui sont apres la date updatetime récupéré dans ma table temp_dossierclos2, mais ca ne fonctionne pas
j'ai fait une erreur quelques part?
Merci
Edit : j'ai trouvé l'erreur... je me suis trompé dans le sens de mon signe a la comparaison de date. c ok maintenant
Bonjour,
Ce sont surement les mêmes pages, sauf que le language html est interprété par un nivateur web sur le poste client (donc ton pc) et php est interprété par un serveur web.
Le seul moyen pour toi de lire un fichier php est donc de mettre cette page sur un serveur web.
Mais sinon, tu peux ouvrir les 2 pages avec le bloc note et voir si le code source est le meme, si oui, ce sont les meme pages
Yves