MySQL: besoin d'aide!!!

Résolu
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
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. 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
    1. 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
  2. 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
    1. pas mal ta suggestion, je vais le tester
      0
  3. 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
    1. 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
    2. @totole 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
    3. @Smoking birdnon

      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
    4. @Smoking birdavec ton where, ça doit marcher aussi, c'est juste inutilement compliqué
      0
  4. Tu n'as pas lu ma réponse.
    Ce n'est pas pas $line1[numeroDePlace]+1 mais numeroDePlace+1 qu'il faut mettre
    0
    1. 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
    2. 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
    3. @totoptdr :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
    4. @totoj'espère que dans le copier-coller tu as corrigé le dir pour le remplacer par un die ...
      0
  5. pas de where, pas de boucle, juste :
    mysqli_query('update `message` set `numeroDePlace`=`numeroDePlace`+1') or dir (mysql_error());
    0