Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
909 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  effacer une ligne entiere et reattribuer son id

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

effacer une ligne entiere et reattribuer son id

n°384184
jabric
Think écolo!
Posté le 06-05-2003 à 12:55:41  profilanswer
 

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!
mood
Publicité
Posté le 06-05-2003 à 12:55:41  profilanswer
 

n°384190
mrbebert
Posté le 06-05-2003 à 13:00:13  profilanswer
 

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.

n°384314
nico168
Posté le 06-05-2003 à 14:02:42  profilanswer
 

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.

n°384328
Ex-Floodeu​r
La Source
Posté le 06-05-2003 à 14:06:06  profilanswer
 

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
n°384445
jabric
Think écolo!
Posté le 06-05-2003 à 14:55:12  profilanswer
 

>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!
n°385040
mrbebert
Posté le 06-05-2003 à 19:43:21  profilanswer
 

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.

n°385102
jabric
Think écolo!
Posté le 06-05-2003 à 20:50:03  profilanswer
 

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!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  effacer une ligne entiere et reattribuer son id

 

Sujets relatifs
reste de la division entiereLecture dans un fichier : ligne par ligne
Ligne en trop après un formStopper un programme lancé en ligne de commande ?
[CSS] fond de ligne changeant 1 fois sur 2[C] stack overflow a la premiere ligne
petit pb avec retours à la ligne sous windows ou linux[C#] - Retour à la ligne dans une textbox
[JS] effacer une case d'un tableau !![PHP & HTML] TextArea : où sont les sauts de ligne ?
Plus de sujets relatifs à : effacer une ligne entiere et reattribuer son id


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR