Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/08/2004, 13h37   #1
Invité de passage
 
Inscription : juin 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 10
Points : 3
Points : 3
Par défaut réinitialiser clé primaire

bonjour,
le champ "num" est la clé primaire de ma table,
comme les enregistrements proviennent d'une autre table ces "num" ne se suivent pas et prennent des valeurs quelconques, existe-t-il une commande permettant de leur redonner des valeurs consecutives, et a partir d'une valeur déterminée?
guegré est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2004, 09h33   #2
Koo
Membre du Club
 
Avatar de Koo
 
Inscription : avril 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 76
Points : 69
Points : 69
j'ai pas tout compris. Et puis ta clé primaire, elle est auto-incrémenté ou pas ?
Koo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2004, 10h55   #3
Invité de passage
 
Inscription : juin 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 10
Points : 3
Points : 3
Citation:
j'ai pas tout compris
en gros la table concernée recupère certains enregistrements (avec un critère de sélection, mais peu importe) d'une autre table.
le champ "num" qui est autoincrementé, conserve lui aussi la valeur qu'il avait dans cette première base , au lieu de partir d'une valeur que je veux ( par exemple, 1 ) en s'autoincrémentant.
De plus grâce à une fonction de phpmyadmin je trie la table par ordre alphabétique, j'aimerais donc que les numeros corespondent a cet ordre.
Je pensais donc, apres avoir classé les enregistrements comme je voulais, réinitialiser les clés primaires afin d'avoir des numéros consécutifs commencant a 1.
voila, merci encore
guegré est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2004, 11h11   #4
Koo
Membre du Club
 
Avatar de Koo
 
Inscription : avril 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 76
Points : 69
Points : 69
en fait sque tu veut, c'est si tu a par exemple, les clé primaire comme ca :

Code :
1
2
3
4
1 | toto
3 | tata
6 | foo
...
faire
Code :
1
2
3
4
1 | toto
2 | tata
3 | foo
...

si c'est paca, montre la structure de ta table, parskeu c vraiment pas clair.
Koo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2004, 11h17   #5
Invité de passage
 
Inscription : juin 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 10
Points : 3
Points : 3
tu as parfaitement compris c'est exactement ca
sachant que les clés de la table non-modifiée ne sont meme pas forcement dans un ordre croissant
guegré est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2004, 14h17   #6
Koo
Membre du Club
 
Avatar de Koo
 
Inscription : avril 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 76
Points : 69
Points : 69
il n'y a pas de fonction MySql qui permette de faire ca.

j'avais une fois ce que tu recherche à l'aide d'un script PHP qui modifie chaque clé primaires. Y suffi de faire une boucle qui parcour les enregistrements, et une variable incrémenté à chaque passage, pour la nouvelle valeur de la clé.

sinon sur la doc mysql ya une autre méthode qui est proposée (pas testé)

Citation:
Envoyé par Guy Martin
For those that are looking to "reset" the auto_increment, say on a list that has had a few deletions and you want to renumber everything, you can do the following.

DROP the field you are auto_incrementing.
ALTER the table to ADD the field again with the same attributes.

You will notice that all existing rows are renumbered and the next auto_increment number will be equal to the row count plus 1.

(Keep in mind that DROPping that column will remove all existing data, so if you have exterior resources that rely on that data, or the numbers that are already there, you may break the link. Also, as with any major structure change, it's a good idea to backup your table BEFORE you make the change.)
http://dev.mysql.com/doc/mysql/fr/example-AUTO_INCREMENT.html
Koo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2004, 11h13   #7
Invité de passage
 
Inscription : juin 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 10
Points : 3
Points : 3
pour ces conseils koO, l'idée de la boucle me semble interessante, j'ai un peu du mal a la programmer pour l'instant mais dès que j'ai un script qui marche je le poste au cas ou ca interesse quelqu'un
guegré est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2004, 11h36   #8
Invité de passage
 
Inscription : juin 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 10
Points : 3
Points : 3
voici le code php que je propose

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php
 
mysql_connect("localhost","...","..."); 
$requete="SELECT * FROM table";
$resultat=mysql_db_query(base1,$requete) OR die ('Erreur '.$requete.' '.mysql_error()); 
//juste pour se placer dans la bonne TABLE
 
$nblignes=mysql_num_rows($resultat);
//nbre d'enregistrements
 
for($j=1; $j <= $nblignes; $j++) {
$ligne = mysql_fetch_row($resultat);
// chaque enregistrement
 
$requete="UPDATE table SET num=$j WHERE num=$ligne[0]";
// $ligne[0] correspond a l'ancienne valeur de num
// $j est la nouvelle valeur
 
$result=mysql_db_query(base1,$requete) OR die ('Erreur '.$requete.' '.mysql_error()); 
 
}
mysql_close();
 
?>
Pour choisir la valeur de départ(par exemple, 300), on doit pouvoir remplacer
Code :
FOR($j=1; $j <= $nblignes; $j++) {
par
Code :
FOR($j=301; $j <= $nblignes+300; $j++) {
guegré est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h18.


 
 
 
 
Partenaires

Hébergement Web