Comment renuméroter id après destruction de ligne(s)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment renuméroter id après destruction de ligne(s)

par deadpig27 » 05 déc. 2006, 15:56

Merci Hubert :D

Il manquait juste le "SELECT FROM" dans le code fourni par Zeus !

Voilà qui résoud mon pb, et clarifie enfin une vieille question que je n'avais jamais approfondi car je n'avais jamais eu à gérer une base dans laquelle les données s'accumulent à vitesse grand V, et où de fréquents petits nettoyages vont s'avérer nécéssaire !!!

Une fois de plus, merci à tous pour la rapidité et la pertinence de vos réponses.

Alain

par Hubert Roksor » 05 déc. 2006, 15:37

Pour récupérer l'enregistrement le plus récent en se basant sur un champs auto-incrémenté il y a plusieurs façon. En théorie, la meilleure serait celle-ci: (n'oubliez pas de remplacer l'astérisque * par les champs que vous voulez récupérer)

Code : Tout sélectionner

SELECT * FROM table WHERE id = ( SELECT MAX(id) FROM table )
Vous pouvez aussi utiliser ça si votre version de MySQL est trop ancienne

Code : Tout sélectionner

SELECT * FROM table ORDER BY id DESC LIMIT 1
PS: bien sûr, le temps que je formatte mon message vous en avez posté 3 nouveaux :lol:

par mere-teresa » 05 déc. 2006, 15:35

date est le nom de ton champ ??

par deadpig27 » 05 déc. 2006, 15:34

Merci ZEUS !

Ta réponse me parraissait tellement flagrante et pourtant :?
Voici l'erreur en retour :

Nombre d'inscrits : 20 Erreur SQL !
SELECT DATE_FORMAT(date, '%d-%m-%Y') as dateFR, heure FROM free WHERE id = MAX(id)
Invalid use of group function

et voici le code modifié (ligne 5) :

Code : Tout sélectionner

$sql="SELECT id, DATE_FORMAT(date, '%d-%m-%Y') as dateFR, nom, prenom, spe01, spe02, spe03, spe04, spe05, spe06, spe07, spe08, spe09, spe10, spe11, spe12, spe13, spe14, spe15, spe15autre FROM free ORDER BY date DESC"; $req=mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $count=mysql_num_rows($req); echo 'Nombre d\'inscrits : <span class="txt06">'.$count.'</span>&nbsp;&nbsp;'; $sql_2="SELECT DATE_FORMAT(date, '%d-%m-%Y') as dateFR, heure FROM free WHERE id = MAX(id)"; $req_2=mysql_query($sql_2) or die('Erreur SQL !<br>'.$sql_2.'<br>'.mysql_error()); $data=mysql_fetch_assoc($req_2); $data['heure']=substr($data['heure'],0,5); echo 'Dernière inscription le <span class="txt06">'.$data['dateFR'].'</span> à '.$data['heure'].'';
??????

par zeus » 05 déc. 2006, 15:12

si tu veux récupérer le dernier enregistrement de ta table, tu peut faire un truc du genre :

Code : Tout sélectionner

SELECT * FROM table WHERE id = MAX(id)

par deadpig27 » 05 déc. 2006, 14:23

Merci TRUC,

Je m'en doutais un peu vu que cette fonctionnalité n'est pas dispo dans phpmyadmin5...

Par contre je suis un peu dans la peine car je vais devoir modifier mon code qui justement utilise id et nombre d'enregistrements (WHERE id=$count", ligne 5 ds le code ci-joint) : le résultat de ma requête, suite à la suppression de 2 lignes, est maintenant forcément bancal...

Voici le code concerné (il s'agit du renvoi du nbre d'inscrits et de la date et heure de la dernière inscription) :

Code : Tout sélectionner

$sql="SELECT id, DATE_FORMAT(date, '%d-%m-%Y') as dateFR, nom, prenom, spe01, spe02, spe03, spe04, spe05, spe06, spe07, spe08, spe09, spe10, spe11, spe12, spe13, spe14, spe15, spe15autre FROM free ORDER BY date DESC"; $req=mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $count=mysql_num_rows($req); echo 'Nombre d\'inscrits : <span class="txt06">'.$count.'</span>&nbsp;&nbsp;'; $sql_2="SELECT DATE_FORMAT(date, '%d-%m-%Y') as dateFR, heure FROM free WHERE id=$count"; $req_2=mysql_query($sql_2) or die('Erreur SQL !<br>'.$sql_2.'<br>'.mysql_error()); $data=mysql_fetch_assoc($req_2); $data['heure']=substr($data['heure'],0,5); echo 'Dernière inscription le <span class="txt06">'.$data['dateFR'].'</span> à '.$data['heure'].'';
Merci pour un tuyau pour me sortir de ce mauvais pas...

par Truc » 05 déc. 2006, 13:17

Salut,

On ne le fait PAS.

L'id ne sert que d'élément "d'unicité"... tu ne doit t'en servir que pour retrouver une ligne pas pour faire de calculs il est donc inutile de les réorganiser.

De plus si tu réorganise dans une table tu n'auras plus les relation éventuelles avec d'autres (clé étrangères).

Comment renuméroter id après destruction de ligne(s)

par deadpig27 » 05 déc. 2006, 13:14

Bonjour à tous,

Comment peut-on renuméroter "automatiquement" une id en "auto_increment" suite à des suppressions de lignes dans la table ?

Merci d'avance.