MySQL: besoin d'aide!!!

Résolu
toto -  
 toto aussi -
Bonjour,j'ai déjà posté ce message dans le forum programation, mais comme ça concerne aussi le webmastering,
et par conséquent les webmaster pourraient apporter la solution, je le poste aussi dans ce forum.
J'espère que CCM me pardonnera si c'est contraire au réglement.

Je vous présente ma table appelée message avec les valeurs :


+----------------------+--------------------------+
| message | numeroDePlace |
+----------------------+--------------------------+
| Bonjour, aaa | 1 |
| Bonjour, bbbb | 2 |
| Bonjour, ccc | 3 |
| Bonjour, dddd | 4 |
| Bonjour, eeeee | 5 |
| Bonjour, zzzz | 6 |
+----------------------+-----------------------+ |

Voilà , mon problème est que je n'arrive pas à trouver la requète qui me permettrait d'incrémenter les valeur de la colonne de numeroDePlace de 1 pour avoir le résultat suivant:

+----------------------+--------------------------+
| message | numeroDePlace |
+----------------------+--------------------------+
| Bonjour, aaa | 2 |
| Bonjour, bbbb | 3|
| Bonjour, ccc | 4 |
| Bonjour, dddd | 5 |
| Bonjour, eeeee | 6 |
| Bonjour, zzzz | 7 |
+----------------------+-----------------------+ |

J'ai essayé la requète suivante :
$request1="select numeroDePlace from message";
$result1=mysqli_query($connection,$request1) or die("no request1");
while($line1=mysqli_fetch_assoc($result1))
{
$request2="update message set numeroDePlace=$line1[numeroDePlace]+1";
$result2=mysqli_query($connection,$request2) or die("no request2");
}

mais ça ne marche pas car ça remplace toutes les valeurs de numeroDePlace par 8 comme ceci:

+----------------------+--------------------------+
| message | numeroDePlace |
+----------------------+--------------------------+
| Bonjour, aaa | 8 |
| Bonjour, bbbb | 8|
| Bonjour, ccc | 8 |
| Bonjour, dddd | 8 |
| Bonjour, eeeee | 8 |
| Bonjour, zzzz | 8 |
+----------------------+-----------------------+ |

Donc, est-ce que quelqu'un connait bien mySQL pour pouvoir résoudre ce problème ?

Merci d'avance à tous ceux qui essaient de m'aider
Cordialement

5 réponses

Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58
 
tu peux mettre ton champ numéro de place en auto_increment

tu fais modification du champ concerné->extra->auto_increment, et ça le fait automatiquement à chaque enregistrement^^
0
toto
 
Merci pour ta réponse, mais ça ne peux pas marcher car le tableau que j'ai montré est partiel (j'ai pas affiché la colonne numeroDeMessage car c'est pour économiser les frappe de texte), le tableau complet est en fait:


+-----------------+----------------+-----------------+
| numeroDeMessage | message | numeroDePlace |
+-----------------+----------------+-----------------+
| 17 | Bonjour, aaa | 1 |
| 18 | Bonjour, bbbb | 2 |
| 19 | Bonjour, ccc | 3 |
| 20 | Bonjour, dddd | 4 |
| 21 | Bonjour, eeeee | 5 |
| 22 | Bonjour, zzzz | 6 |
+-----------------+----------------+-----------------+

dans lequel la colonne numeroDeMessage était déjà mis en extra>auto_increment.
Par conséquent, je ne peux pas mettre aussi la colonne numeroDePlace en extra>auto_increment.
Le type de donnée pour la colonne numeroDePlace est bigint .
0
Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58
 
désolé (: j'aurais du m'en douter^^ :D

$request1="select numeroDePlace from message"; 
$result1=mysqli_query($connection,$request1) or die("no request1"); 
while($line1=mysqli_fetch_assoc($result1)) 
{ 
$newNb=$line1['numeroDePlace']++;
$request2="update message set numeroDePlace=' ".$newNb."' where numeroDeMessage='".$line1['numeroDeMessage']."' "; 
mysqli_query($connection,$request2) or die("no request2"); 
}


J'aurais fait quelque chose dans ce goût là^^
0
toto
 
pas mal ta suggestion, je vais le tester
0
toto aussi
 
Bonjour

Normal que ça te mette la même valeur partout, dans ta requête update, il n'y a pas de 'WHERE' donc elle s'applique à tous les enregistrements.

Tu as un moyen très simple d'obtenir ton résultat sans avoir de boucle à faire :
update message set numeroDePlace=numeroDePlace+1.

Pas besoin de select et de while pour traiter tes enregistrements un par un
0
toto
 
Merci pour ta réponse, mais justement, j'ai pas mis le where car je veux que l'incrémentation s'applique à TOUTES les valeurs de la colonne numeroDePlace,

et en plus tu as dis qu'il y a un moyen très simple d'obtenir le résultat sans avoir de boucle à faire :
update message set numeroDePlace=numeroDePlace+1 -> Ce moyen, je l'ai déjà fait , je l'ai méme mentionné dans l'énoncé de mon problème par update message set numeroDePlace=$line1[numeroDePlace]+1
0
Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58 > toto
 
le where tel que je le suggère permet de le faire à chaque rang séparément, mais dans la même requête

sans le where, je pense que ton update traite tous les rangs de la même façon, et donc avec la même valeur^^

non?
0
toto aussi > Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention  
 
non

sans where tu affectes la même valeur à tous les enregistrements. Et avec la boucle en prime, tu recommences autant de fois qu'il y a d'enregisrements. Si tu pouvais voir les valeurs intermédiaires tu les verrais tous passer à 2 puis tous à 3 puis tous à 4 etc.. jusqu'à 8
avec une formule du type champ = champ+1, sans boucle, tu incrémentes tous les champs une fois et une seule
0
toto aussi > Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention  
 
avec ton where, ça doit marcher aussi, c'est juste inutilement compliqué
0
toto aussi
 
Tu n'as pas lu ma réponse.
Ce n'est pas pas $line1[numeroDePlace]+1 mais numeroDePlace+1 qu'il faut mettre
0
toto
 
A pardon, je vais tte suite tester ta soluce en corrigeant mon erreur.

Mais si le je met le where, à quelle colonne je dois l'appliquer ?
0
toto
 
C'est formidable totoaussi, j'ai fait copier-coller ton code et supprimer le while , et ça marche .T'avais raison, y a pas besoin de boucle,
et il fallait bien mettre numeroDePlace=numeroDePlace+1 (c'est très important)

Merci à toi aussi smokebird,

et aussi à CCM



RESOLU, je peux dormir tranquillement -_-
0
Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58 > toto
 
ptdr :D

j'remercie également toto_aussi, même si dans l'immédiat j'ai pas l'utilité de l'info qu'il a apporté ce soir, je sais que le jour où ça viendra, ba j'serais bien content :D
0
toto aussi > toto
 
j'espère que dans le copier-coller tu as corrigé le dir pour le remplacer par un die ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toto aussi
 
pas de where, pas de boucle, juste :
mysqli_query('update `message` set `numeroDePlace`=`numeroDePlace`+1') or dir (mysql_error());
0