Vous n'êtes pas identifié(e).
Bonjour,
Je viens un peu aux nouvelles pour savoir si tu as réussi à la construire.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonsoir,
Je n'ai pas eu vraiment le temps de la faire, mais j'ai du en faire une pour un autre site, donc j'ai utiliser ce que tu m'avais dis.
IL faut vraiment que j'arrive à trouver du temps pour crazy pet
Mais je ne colle l'autre que j'ai pu faire grace a ton aide :
CREATE DEFINER=`root`@`localhost`
FUNCTION `calc_combat2`(id_employe_expediteur int, agressivite_expediteur int, id_employe_destinataire int, agressivite_destinataire int)
RETURNS INT
BEGIN
DECLARE rand1 INT;
DECLARE rand2 INT;
DECLARE id_gagnant INT;
DECLARE id_perdant INT;
SET rand1 = ROUND(RAND()*agressivite_expediteur,RAND()*agressivite_expediteur*10);
SET rand2 = ROUND(RAND()*agressivite_destinataire,RAND()*agressivite_destinataire*10);
IF rand1 >= rand2 THEN
SET id_gagnant = id_employe_expediteur;
SET id_perdant = id_employe_destinataire;
END IF;
IF rand1 < rand2 THEN
SET id_gagnant = id_employe_destinataire;
SET id_perdant = id_employe_expediteur;
END IF;
INSERT INTO defis_perdu VALUES (id_perdant,'honte',DATE_ADD(NOW(),INTERVAL 1 DAY))
RETURN id_gagnant;
END##
Je te tiens au courant
merci
Hors ligne
Bonjour,
La progression fait plaisir à voir. N'oublie pas que que tu peux utiliser tes fonctions non seulement dans des instruction SELECT mais aussi dans les SET de tes procédures
par exemple : SET p=calc_combat(20);
A bientôt donc.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Merci
La je l'utilise dans une requete :
bonne soirée
Hors ligne
Salut,
avec du retard, j'essaye donc de faire ma fonction de calcule de distance, avec les améliorations souhaitées, mais phpmyadmin me sert qu'il y a un erreur donc ca n'en veut pas. j'ai essayer de la tourner dans tous les sens et je vois pas le chmilblik... une idée?
DECLARE rand INT;
SET rand = ROUND(-999,999);
IF type_circuit == 'S' THEN SET add_competence = strong; END IF;
IF type_circuit == 'A' THEN SET add_competence = agilite; END IF;
IF type_circuit == 'I' THEN SET add_competence = intel; END IF;
IF type_circuit == 'E' THEN SET add_competence = endurance; END IF;
RETURN ((puissance-((puissance_min+add_competence)/endurance)*temps/(duree*120))*temps+ rand)
RETURN id_gagnant;
END##
Merci
Hors ligne
1) quelle erreur ????
2) END## ??????????????? deliliter §?????
3) 2 return ?????????????????
a++
Hors ligne
1)
MySQL a répondu:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE rand INT;
SET rand = ROUND(-999,999);
IF type_circuit == 'S' THEN S' at line 6
2) le delimiter est bien a ##
3) oui, 2 return... surement un mauvais copier/coller via le forum
Hors ligne
Bonjour,
Tu as tout simplement oublié un BEGIN entre ton RETURNS et ton DECLARE
ensuite tu vas avoir une autre erreur avec tes RETURN qui se suivent et avec en plus le premier qui n'a pas de ; à la fin. J'ai pas bien compris ce que tu souhaites faire avec, car il n'y a aucun intérêt à les mettre ainsi.
Dernière modification par Jc (29-04-2012 19:40:27)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Malgré le code modifié, ca me donne tjs la même erreur :
DECLARE rand INT;
SET rand = ROUND(-999,999);
IF type_circuit == 'S' THEN SET add_competence = strong; END IF;
IF type_circuit == 'A' THEN SET add_competence = agilite; END IF;
IF type_circuit == 'I' THEN SET add_competence = intel; END IF;
IF type_circuit == 'E' THEN SET add_competence = endurance; END IF;
RETURN ((puissance-((puissance_min+add_competence)/endurance)*temps/(duree*120))*temps+ rand);
END##
Hors ligne
Oui excuse moi, j'ai oublié de te dire qu'il te faut aussi remplacer tes == par = (on est pas en PHP)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
evite aussi d'appeler ta variable rand ainsi. Appele-la c_rand par exemple, ca ne mange pas de pain, et cela evite les conflits potentiels.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
J'avais hésité a essayer sans, puis je me suis dis que non..
enfin toujours est il que non ca ne solution pas le probleme. tjs même msg d'erreur
Hors ligne
Si c'est ce que je pense tu l'as déjà dans ta formule ecrit correctement * temps + RAND(-999999));
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
pour avoir un nombre aléatoire.
l'idée est de faire la meme chose que ca en php :
Hors ligne
Bonjour,
En fait la syntaxe initiale est bonne mais pas le contenu
To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i)).
Pour un nombre compris entre 1 et 999 999 il te faut donc ecrire
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
J'ai donc mis :
[code)mysql]SET c_rand=FLOOR(-999+RAND()*1998);[/code]
mais j'ai toujours :
MySQL a répondu:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN
DECLARE rand INT;
SET c_rand=FLOOR(-999+RAND()*1998);
IF type_ci' at line 4
Hors ligne
Ty peux nous réécrire au propre ta fonction que je puisse voir ce qui ne vas pas encore?
PS: si tu ecris SET c_rand=... il te faut écrire DECLARE c_rand=.. et non rand= (rand est un nom réservé n'oublie pas).
Dernière modification par Jc (29-04-2012 22:03:29)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Voila le message d'erreur de pma :
CREATE DEFINER = `root`@`localhost` FUNCTION `calc_dist` (
strong smallint,
agilite smallint,
intel smallint,
endurance smallint,
temps smallint,
puissance_min smallint,
puissance smallint,
duree smallint,
type_circuit varchar( 1 )
) BEGIN DECLARE c_rand INT;
SET c_rand = FLOOR( -999 + RAND( ) *1998 ) /100;
IF type_circuit = S THEN SET add_competence = strong;
END IF ;
IF type_circuit = A THEN SET add_competence = agilite;
END IF ;
IF type_circuit = I THEN SET add_competence = intel;
END IF ;
IF type_circuit = E THEN SET add_competence = endurance;
END IF ;
RETURN (
(
puissance - ( (
puissance_min + add_competence
) / endurance ) * temps / ( duree *120 )
) * temps + c_rand
);
END
MySQL a répondu:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN
DECLARE rand INT;
SET c_rand=FLOOR(-999+RAND()*1998)/100;
IF type_ci' at line 4
Dernière modification par ebouilleur (29-04-2012 23:20:31)
Hors ligne
Bonsoir,
Si a chaque fois que tu corriges une erreur tu en créé une là où il n'y en avait pas avant, on ne va pas s'en sortir^^
Je te corrige ça
CREATE DEFINER = `root`@`localhost` FUNCTION `calc_dist` (strong SMALLINT UNSIGNED, agilite SMALLINT UNSIGNED, intel SMALLINT UNSIGNED, endurance SMALLINT UNSIGNED, temps SMALLINT UNSIGNED, puissance_min SMALLINT UNSIGNED, puissance SMALLINT UNSIGNED, duree SMALLINT UNSIGNED, type_circuit CHAR(1))
RETURNS INT
BEGIN
DECLARE c_rand INT;
DECLARE add_competence SMALLINT UNSIGNED;
SET c_rand = FLOOR( -999 + RAND( ) *1998 ); -- J'ai retiré la division par 100 pour que c_rand reste un entier! Si tu veux diviser par 100 il faut modifier le type en conséquence ou arrondir.
IF type_circuit = 'S' THEN SET add_competence = strong; END IF ;
IF type_circuit = 'A' THEN SET add_competence = agilite; END IF ;
IF type_circuit = 'I' THEN SET add_competence = intel; END IF ;
IF type_circuit = 'E' THEN SET add_competence = endurance; END IF ;
RETURN FLOOR((puissance - ( (puissance_min + add_competence) / endurance ) * temps / ( duree *120 ) ) * temps + c_rand); -- J'ai rajouté le FLOOR pour être certain d'obtenir un entier conformément au type attentu déclaré plus haut.
END;$$
Normalement tout devrait aller maintenant.
Dernière modification par Jc (30-04-2012 03:09:11)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
quel intérêt de faire cette fonction en SQL ??????????????????????
a++
Hors ligne
je réponds à sa place
AUCUN :D
a++
Hors ligne
Bon ben puisque tu y tiens je vais te le dire ^^
- Cela va d'abord permettre d'automatiser les processes de course coté SGBDR.
Cela signigie quoi?
- Cela évite les aller-retour inutiles entre les serveurs (MySQL-PHP) et les temps de communication sont les plus pénalisants dans les processes car à l'échelle du SGBDR ils sont longs, et soumis à beaucoup de paramètres qui vont rallonger d'autant les temps d'attente. Et je ne parle pas d'un blocage réseau, d'un plantage/bug PHP, qui peuvent geler les verrous et bloquer l'application.
- Qui dit temps d'attente important, implique des verrous posés plus longtemps sur les tables et donc, la capacité de montée en charge du serveur dans un contexte concurrentiel est fortement amoindrie. Il faut dire qu'avec MySQL ce facteur est aggravant car c'est un débutant en la matière: il commence à montrer ses limites à partir de 5 accès concurrentiels dans sa capacité à supporter la charge. Plus tôt on libère les ressources, plus on retarde le moment fatidique avec MySQL à partir duquel il faut migrer vers un SGBDR plus évolué et plus on limite les temps d'attente des autres utilisateurs dans leur accès à l'information.
Tu veux que je t'en rajoute une couche?
Dernière modification par Jc (30-04-2012 16:56:21)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
L'interet est de faire le calcule d'une distance parcouru et de l'utiliser dans une requete sql
ici :
Et merci JC, en effet ca fonctionne mieux
Dernière modification par ebouilleur (30-04-2012 17:02:39)
Hors ligne