29-01-2014, 04:23 PM
(Modification du message : 29-01-2014, 05:14 PM par Sephi-Chan.)
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.
Lorsque tu utilises
$variable = $valeur1 + $valeur2;
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:
$ajout = rand(50, 90)/100.0
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:
mysql_query("UPDATE niveau1 SET taille = taille + $ajout WHERE id = id ");
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):
mysql_query("UPDATE niveau1 SET taille = taille + 0.7 WHERE id = id ");
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():
mysql_query("UPDATE niveau1 SET taille = taille + RAND() WHERE id = id ");
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:
mysql_query("UPDATE niveau1 SET taille = taille + (0.5+0.4*RAND()) WHERE id = id ");
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).
mysql_query("UPDATE `niveau1` SET `taille` = `taille` + (0.5+0.4*RAND())");
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.