Incrémenter un champ avec la fonction rand() en php - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Incrémenter un champ avec la fonction rand() en php (/showthread.php?tid=6807) |
Incrémenter un champ avec la fonction rand() en php - Lindis - 29-01-2014 Re encore moi pour un deuxième topic de suite excusez mois en :$ Après avoir harpanté les topics possibles concernant mon envie d'update un champ mysql, je viens poser la question ici. Je cherche à incrémenter une valeur comprise entre 0.50 et 0.90 à un champ de ma table et ceci aléatoirement. Pour le moment l'update se fait bien, mais les chiffres incrémentés sont tous les mêmes quel que soit l'id de la ligne. J'ai trouvé une fonction nommée rand() en php mais je ne vois pas comment l'utiliser avec mon update. Je me suis pas mal documenté sur les fonctions pour trouver une solution à mes désirs mais je n'ai pas trouvé d'exemples de ce que je souhaiterais faire.
Mon code n'est surement pas au top étant débutant dans le domaine php. $sql ="UPDATE niveau1 SET taille = taille + 0.95 WHERE id = id "; cette ligne ajoute 0.95cm à tous mes plants chaque heure, hors je me demande comment associer à celle ci la fonction rand() capable d'incrémenter entre 0.50 et 0.90 cm aléatoirement et surtout n'avoir que deux chiffres après la virgule N'hésitez pas à remettre ce morceau de code en bon ordre si cela vous dit, sa m'aiderait à mieux comprendre mes erreurs Merci à vous la communauté J-W :roi: RE: Incrémenter un champ avec la fonction rand() en php - xviniette - 29-01-2014
dans l'update tu fais taille + $ajout. RE: Incrémenter un champ avec la fonction rand() en php - Lindis - 29-01-2014 Ah cette solution pourrait être la bonne effectivement, je test sa de suite Merci Xviniette Ah non, j'ai mis 20 plants à pousser, et quand j'actualise mon script censé update les champs, les plants sont tous logés à la même enseigne Le code
Là il ajoute entre 0.50 et 0.90 cm à toutes mais le chiffre incrémenté est le même pour toutes les plantes. Désolé d'être null iffle: RE: Incrémenter un champ avec la fonction rand() en php - Xenos - 29-01-2014 Dans tout soft informatique, il faut bien comprendre ce que fait la machine Lorsque tu utilises
Alors la machine évalue $valeur1, $valeur2, puis additionne les deux (avec des changements de types possibles). Le résultat est alors stocké dans $variable. Ainsi, quand tu fais:
La machine évalue rand(), qui prend donc une valeur aléatoire entre 50 et 90. Ensuite, elle divise la valeur par 100. Enfin, la machine stocke ce résultat dans $ajout. Après, si tu fais:
La machine procède de même: Elle évalue la valeur de $ajout, et l'insère dans la requête. Enfin, elle envoie la requête à MySQL, qui reçoit (par exemple):
D'où le fait que toutes les lignes soient incrémentées de 0.7 Si tu veux que la valeur aléatoire change d'une ligne à l'autre, tu dois dire au moteur MySQL de générer lui-même l'aléatoire à chaque ligne, via la fonction RAND():
RAND() renvoie une valeur entre 0 et 1, donc il te faut l'ajuster un peu pour avoir un résultat entre 0.5 et 0.9:
De façon annexe, pourquoi "where id = id"? Cette clause est inutile il me semble (à moins que le champ "id" puisse contenir la valeur NaN).
Enfin, "niveau1" comme nom de table me semble étrange... Cela sous-entend que tu as des tables "niveau2", "niveau3"... Préfères plutôt une table "niveaux", avec un champ "niveauPlante" supplémentaire. RE: Incrémenter un champ avec la fonction rand() en php - Lindis - 29-01-2014 Xenos merci tout est aléatoire maintenant Jai donc modifié ma requête en:
et le dernier soucis avant de vous laisser tranquils, est que je voudrais garder que deux chiffres aprés la virgule Car en ce moment j'ai: 0.60663425522543 Cm Merci de vos réponses. J'aime bien ton idée de mettre différents stades dans la table Niveau1 chose que je vais mettre en oeuvre RE: Incrémenter un champ avec la fonction rand() en php - xviniette - 29-01-2014 Désolé pour ma première réponse, je n'avais pas très bien compris ce que tu attendais. Pour l'arrondie à deux chiffres, il existe la méthode ROUND. Ce qui te donne :
RE: Incrémenter un champ avec la fonction rand() en php - Lindis - 29-01-2014 Xviniette il n'y a pas de quoi et maintenant sa fonctionne niquel. Un grand merci, vous êtes super Et le jour ou tout deux vous avez besoin de mes services en matiére de graphismes, n'hésitez pas à me mp. RE: Incrémenter un champ avec la fonction rand() en php - Xenos - 29-01-2014 Un petit détail quand on utilise les arrondis de nombre aléatoires: souvent, on perd l'équiprobabilité des valeurs. Si tu fais:
Alors toutes les valeurs entre 0.5 et 0.9 seront équiprobables (à epsilon près, l'arrondis intrinsèque de la machine).En revanche, si tu fais:
Alors les valeurs 0.50 et 0.90 seront deux fois moins probables que les autres. En effet, pour avoir 0.50, il faut (0.5+0.4*RAND()) < 0.505, c'est à dire 0 <= RAND() < 0.0125. Idem, pour 0.90, il faut 0.9875 <= RAND() < 1.00 Donc, la plage de valeurs de RAND() qui donne 0.50 (ou 0.90) fait 0.0125 de "largeur". En revanche, pour tout autre nombre, par exemple 0.80, il faut 0.795 <= (0.5+0.4*RAND()) < 0.805. La plage de valeurs acceptables pour RAND() est alors de 0.025 ! Sur un petit dessin, cela se voit bien: Ici, j'ai demandé à MySQL d'ajouter des centaines de milliers de lignes, en utilisant "ROUND(0.5+0.4*RAND(), 2)" comme valeur. Ensuite, je lui demande de compter combien de fois chaque valeur (0.50, 0.51, 0.52, ..., 0.90) apparait. On voit immédiatement que 0.50 et 0.90 apparaissent deux fois moins souvent que les autres Pour des plages comme [0.50..0.90], c'est acceptable. Mais si tu veux appliquer le même procédé à un ensemble de valeurs comme {1, 2, 3}, alors tu auras des écarts importants (1 et 3 apparaitront 25% du temps, alors que 2 apparaitra 50% du temps!) En pratique, sans arrondis, on a le même problème, mais le nombre de valeurs étant tellement importants (167.773 valeurs possibles entre 0.5 et 0.51 !), cela ne se sent pas vraiment. En revanche, plus le nombre de valeurs permises sera réduit, plus cela se sentiras, dit autrement, plus l'arrondis sera fort (moins de chiffres après la virgule), plus le phénomène se sentira. RE: Incrémenter un champ avec la fonction rand() en php - Lindis - 29-01-2014 Merci Xenos, cool ton shèma, et très explicatif Bah sa ne me dérangera pas de voir que deux plants de la bdd font exactement la même taille, tant qu'ils ne sont pas tous égaux. Car sa serait un peux trop beau pour les utilisateurs s'il pouvaient tous les passer au stade supérieur en même temps, c'est à dire dés 10 centimêtres atteints. Par contre, je ne pense pas utiliser la table niveau1 pour les trois stades de la pousse, car aprés il va y avoir des chanps suplémentaires pour les grammes, et aussi il va falloir que je fasse un rand encore pour savoir quel plant sera male ou femelle, Le male produira des graines, et les femelles des grammes RE: Incrémenter un champ avec la fonction rand() en php - MadMass - 29-01-2014 Les plantes ne sont pas sexuées, si ? :° |