[Mysql/php] ID Autoincrement, recuperer id inutilisés
7 messages
• Page 1 sur 1
-

yannouk - WRInaute passionné

- Messages: 2142
- Inscription: 11 Oct 2003
[Mysql/php] ID Autoincrement, recuperer id inutilisés
Bonjour.
A force d'ajouer des champs en autoincrement dans ma base, l'id commence à devenir vraiment long. Or, les vieux ID sont regulierement supprimés.
Je ne sais pas si j'ai été clair, mais en gros: quand on ajoute une annonce sur Drimmo, l'id de l'annonce va etre 100000 alors que les id 1 2, ou 3 sont peut etre libre. Est-il possible de récuperer ces id libres plutot qu'ajouter systematiquement +1 au dernier id utilisé?
Merci
A force d'ajouer des champs en autoincrement dans ma base, l'id commence à devenir vraiment long. Or, les vieux ID sont regulierement supprimés.
Je ne sais pas si j'ai été clair, mais en gros: quand on ajoute une annonce sur Drimmo, l'id de l'annonce va etre 100000 alors que les id 1 2, ou 3 sont peut etre libre. Est-il possible de récuperer ces id libres plutot qu'ajouter systematiquement +1 au dernier id utilisé?
Merci
- Neveldo
- Nouveau WRInaute

- Messages: 3
- Inscription: 13 Mar 2008
Salut,
ça n'est pas forcément très utile, d'autant plus que si ces ids sont référencées dans d'autres tables, cela risque de compliquer l'opération !
Si tu veux conserver un ordre d'id propre, tu peux de faire un petit script de routine à executer de temps en temps (via CRON ?) :
tu boucle simple sur chacune des entrées de ta tables, et tu réinitialise l'id de chaque entrée avec une variable que tu incrémentera dans ta boucle.
Ca donne quelque chose comme ça :
Après, si dans d'autres tables tu a des clés étrangères référençant ton champ id, ça devient plus compliqué puisqu'il faudra aussi les mettre à jour.
Bonne journée !
ça n'est pas forcément très utile, d'autant plus que si ces ids sont référencées dans d'autres tables, cela risque de compliquer l'opération !
Si tu veux conserver un ordre d'id propre, tu peux de faire un petit script de routine à executer de temps en temps (via CRON ?) :
tu boucle simple sur chacune des entrées de ta tables, et tu réinitialise l'id de chaque entrée avec une variable que tu incrémentera dans ta boucle.
Ca donne quelque chose comme ça :
- Code: Tout sélectionner
$i=1;
$sql = "SELECT *
FROM table
ORDER BY champ";
$request = mysql_query($sql);
while ($result = mysql_fetch_array($request)) {
mysql_fetch_array("UPDATE table SET id = " . $i . " WHERE id = " . $result['id']);
$i++;
}
Après, si dans d'autres tables tu a des clés étrangères référençant ton champ id, ça devient plus compliqué puisqu'il faudra aussi les mettre à jour.
Bonne journée !
-

yannouk - WRInaute passionné

- Messages: 2142
- Inscription: 11 Oct 2003
En fait, j'ai pensé a ca car je trouve domage d'avoir des id a 6 ou 7 caracteres quand la majeure partie des id a 2, 3 ou 4 caracteres sont inutilisés (puisque les annonces restent en ligne quelques mois tout au plus)
@Neveldo : ton script semble reorganiser tous les id ... Mais les annonces en ligne ne doivent pas voir leur id bouger en cours de route ou ce sera le gros bordel
merci quand meme!
@Neveldo : ton script semble reorganiser tous les id ... Mais les annonces en ligne ne doivent pas voir leur id bouger en cours de route ou ce sera le gros bordel
- steph2908
- Nouveau WRInaute

- Messages: 15
- Inscription: 19 Déc 2007
En effet c'est le principe des id, c'est de ne pas etre reutilise... (pb en cas de bookmark, archives, etc.)
Mais si tu veux le faire le plus simple est de gere un pool d'id disponible, ca eviteras de faire al requete a chaque insert pour recuperer le premier id dispo.
ce pool d'id tu peux l'enrichir en une fois par un script qui check tes id et remplis avec les trous et ensuite dans tes traitements de suppresion de tes annonces tu rajoute l'id supprime a ton pool d'id.
ensuite rien n'empeche de lancer de temps en temps ton script de recup de tout les id dispo
Sinon je vois pas comment recuperer sans parcours de tout les id, le premier id dispo... et mysql ne sait pas faire en natif il me semble...
Mais si tu veux le faire le plus simple est de gere un pool d'id disponible, ca eviteras de faire al requete a chaque insert pour recuperer le premier id dispo.
ce pool d'id tu peux l'enrichir en une fois par un script qui check tes id et remplis avec les trous et ensuite dans tes traitements de suppresion de tes annonces tu rajoute l'id supprime a ton pool d'id.
ensuite rien n'empeche de lancer de temps en temps ton script de recup de tout les id dispo
Sinon je vois pas comment recuperer sans parcours de tout les id, le premier id dispo... et mysql ne sait pas faire en natif il me semble...
-

yannouk - WRInaute passionné

- Messages: 2142
- Inscription: 11 Oct 2003
Vous etes en train de me faire douter là...Je ne dois pas etre le seula etre confronté a ce genre de reflexions....Vous gerez comment cette incrementation excessive, vous? (Plusieurs centaines de trous sont generes chaque jour dans mon cas)
7 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Récupérer résultat requête php/mysql dans Flash Mx
- Script PHP pour récupérer pour récupérer l'HTML d'une page
- Que faire avec ses NDD inutilisés ?
- [MySQL] Récupérer la première ligne d'un GROUP BY
- Mysql - Récupérer des valeures de requetes récursives
- [PHP-MySQL] : argument is not a valid MySQL ressource
- [Résolu] [MYSQL] Récupérer l'auto-incremente inséré
- Récupérer l'avant dernier résultat d'une requête mysql
- Récupérer les données adwords en base (MySQL ou autre)
- [PHP/MySQL] Excepter une valeur dans un requête SQL en PHP
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Le WRInaute du moment - 24-10-2006
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

