effacer une ligne entiere et reattribuer son id

effacer une ligne entiere et reattribuer son id - PHP - Programmation

Marsh Posté le 06-05-2003 à 12:55:41    

Bonjour  :jap:  
 
Dans la série "je débute dans le php", j'ai un piti probleme.
Je risque d'etre assez confu, donc lisez peut etre jusqu'au bout pour ne pas patir sur une fausse piste :o)
 
Je voudrais savoir si il est possible de supprimer definitivement une ligne d'une table, et non juste son contenu. C'est à dire que son ancien id soit réattribué à la ligne suivante. Mon but est de ne pas avoir de lignes (id) vides d'une part, et d'autre part que les enregistrements suivant aient pour id le nombre suivant le dernier enregistrement, et non le nombre totale d'enregistrement depuis le début.
 
--> exemple:
j'ai une table avec du contenu en id 1,2,3 et 4. Je supprime la ligne 3, donc je veux que l'id de ma ligne 4 diminue de 1 pour arriver à id=3.
Je veux également que l'enregistrement suivant ait pour id 4 (3+1), et non 5 comme il va le faire automatiquement lorsque je vais le créer.
 
 
Existe-t-il une fonction toute faite pour ca? Au pire, je pense qu'il est possible de diminuer l'id avec une boucle, mais ce qui me pose probleme c'est que les enregistrements ulterieurs vont laisser des "trous" dans mes id...
Je ne sais pas si je suis compréhensible
 
--> Pourquoi j'ai ce probleme:
Je tire un nombre aléatoire parmis (1-nbre d'enregistrements), soit le nombre i par exemple, puis j'affiche dans une page le contenu de l'enregistrement ayant pour id "i".
 
Mon problème: quand je modifie ma table, j'ai des id vides... je peux par exemple, en ayant 3 enregistrements, avoir des enregistrements sur la ligne 1, 4 et 6.
Là ou ca coince, c'est que quand je tire entre 1 et 3 (qui est bien mon nombre d'enregistrements total), ca va m'afficher des enregistrements vides (exemple: i = 2 ou i = 3) et certaines de mes lignes ne vont jamais etre affichées (ligne 4 et 6 ici).
 
C'est plus clair?
 
Merci ;o)


---------------
Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson pêché, alors vous découvrirez que l'argent ne se mange pas. Think écolo!
Reply

Marsh Posté le 06-05-2003 à 12:55:41   

Reply

Marsh Posté le 06-05-2003 à 13:00:13    

Si tu veux le i-ème enregistrement de la table, ce n'est pas obligatoirement celui ayant l'ID i.
Une requête du genre :
SELECT * FROM table ORDER BY id LIMIT $i, 1
te renvoie la i-ème ligne (numérotation commencant à 0), dans l'ordre de la colonne id.

Reply

Marsh Posté le 06-05-2003 à 14:02:42    

mon sql est un peu rouillé mais pour effacer un enregistrement, tu dois pouvoir faire un truc du genre :
 
delete * from ta_table where id=X
update id=id-1 from ta_table where id>X
 
 
en clair, tu supprimes la ligne qui a X pour ID  et tu retires 1 a tout les ID qui sont superieure a X.

Reply

Marsh Posté le 06-05-2003 à 14:06:06    

nico168 a écrit :

mon sql est un peu rouillé mais pour effacer un enregistrement, tu dois pouvoir faire un truc du genre :
 
delete * from ta_table where id=X
update id=id-1 from ta_table where id>X
 
 
en clair, tu supprimes la ligne qui a X pour ID  et tu retires 1 a tout les ID qui sont superieure a X.
 

pas bete !


---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
Reply

Marsh Posté le 06-05-2003 à 14:55:12    

>Nico: c'est clair que c'est plus rapide et moins prise de tête qu'une boucle, mais cela ne resoud qu'une partie du probleme: les enregistrements ultérieurs ne vont pas suivre le dernier id: ils vont créer des trous...
 
>mrBebert: A priori ca resoudrait tous mes problèmes ce que tu proposes... Cool  :love:  
Juste une question: si je comprends bien le début du truc (je selectionne toutes les infos de la table, qui est rangée par id) je pige pas le fonctionnement du LIMIT $i,1
Tu pourrais me l'expliquer brievement? à quoi sert le Limit et à quoi sert le 1. merci beaucoup  :pt1cable:  
 
SELECT * FROM table ORDER BY id LIMIT $i, 1


---------------
Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson pêché, alors vous découvrirez que l'argent ne se mange pas. Think écolo!
Reply

Marsh Posté le 06-05-2003 à 19:43:21    

Le LIMIT indique au serveur de ne pas renvoyer toutes les lignes, mais seulement certaines. Le premier paramètre est le numéro de la première ligne (commence à 0) à renvoyer, le 2ème paramètre le nombre de lignes à renvoyer.

Reply

Marsh Posté le 06-05-2003 à 20:50:03    

Impec!
 
Merci beaucoup  :bounce:  :)


---------------
Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson pêché, alors vous découvrirez que l'argent ne se mange pas. Think écolo!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed