[Mysql/php] ID Autoincrement, recuperer id inutilisés

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par yannouk, 20 Mars 2008.

  1. yannouk
    yannouk WRInaute passionné
    Inscrit:
    11 Octobre 2003
    Messages:
    1 559
    J'aime reçus:
    0
    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
     
  2. Neveldo
    Neveldo Nouveau WRInaute
    Inscrit:
    13 Mars 2008
    Messages:
    3
    J'aime reçus:
    0
    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 :

    Code:
    	$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 !
     
  3. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Je pense pas qu'il souhaite modifier les ID mais récupérer des ID inutilisés.
    Perso je te déconseillerais ça, c'est une des bases en BDD, ID unique , utilisé qu'une fois, ...
     
  4. yannouk
    yannouk WRInaute passionné
    Inscrit:
    11 Octobre 2003
    Messages:
    1 559
    J'aime reçus:
    0
    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!
     
  5. steph2908
    steph2908 Nouveau WRInaute
    Inscrit:
    19 Décembre 2007
    Messages:
    15
    J'aime reçus:
    0
    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...
     
  6. yannouk
    yannouk WRInaute passionné
    Inscrit:
    11 Octobre 2003
    Messages:
    1 559
    J'aime reçus:
    0
    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. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Perso je laisse faire, peu importe les trous. (et c'est comme ça que fonctionne un forum également).
     
Chargement...
Similar Threads - [Mysql php] Autoincrement Forum Date
[mysql+php] Insert....select et modifications au passage Développement d'un site Web ou d'une appli mobile 18 Août 2009
[MYSQL/PHP] Probleme d'encodage et serialize Développement d'un site Web ou d'une appli mobile 22 Juin 2009
[résolu][mysql] faire un "NOT LIKE" sur une chaîne contenant des / Développement d'un site Web ou d'une appli mobile 25 Octobre 2014
[MySQL] Liste (select) avec des lignes au hasard Développement d'un site Web ou d'une appli mobile 23 Octobre 2014
[MySQL] Requête SELECT et INSERT entre 3 tables liées+Aide Développement d'un site Web ou d'une appli mobile 30 Avril 2014
[MySQL] Nombre d'enregistrements sur des horaires précis Développement d'un site Web ou d'une appli mobile 19 Juillet 2013
[MYSQL] Comment remplacer caractères dans tous les champs de toutes les tables d'une base? Développement d'un site Web ou d'une appli mobile 11 Juillet 2013
[MYSQL] Une sorte de "OR JOIN" ? Développement d'un site Web ou d'une appli mobile 5 Juillet 2013
[MySQL] sélectionner la dernière note pour chaque élève en une seule requète ? Développement d'un site Web ou d'une appli mobile 12 Avril 2012
[Mysql] Requête PDO avec variable php Développement d'un site Web ou d'une appli mobile 16 Février 2012
[Mysql] Requête PDO aléatoire Développement d'un site Web ou d'une appli mobile 7 Février 2012
[MYSQL] Tri par date Développement d'un site Web ou d'une appli mobile 7 Septembre 2011
[MySQL] rechercher une valeur dans un champ sérialisé Développement d'un site Web ou d'une appli mobile 10 Août 2011
[MySQL] Requête SELECT entre 3 tables liées Développement d'un site Web ou d'une appli mobile 10 Août 2011
[MySQL] addslashes et stripslashes Développement d'un site Web ou d'une appli mobile 9 Août 2011
[résolu] [mysql] Conditions WHERE avec AND et OR Développement d'un site Web ou d'une appli mobile 13 Mai 2011
[mysql] trier les résultats d'une requête selon une table non liée à la requête Développement d'un site Web ou d'une appli mobile 15 Avril 2011
[résolu] [mysql] passer un champ à une valeur donnée pour tous les enregistrements Développement d'un site Web ou d'une appli mobile 25 Mars 2011
[MySQL] INSERT / UPDATE conditionnel Développement d'un site Web ou d'une appli mobile 1 Février 2011
[mysql] LIMIT utile sur un champ indexé ? Développement d'un site Web ou d'une appli mobile 8 Décembre 2010