Dans l'une de mes tables de ma base de données, j'ai les valeurs suivantes. ces valeurs valent d'ID. Pour des raisons de facilités, ces id ne sont pas en auto-Incrément. (je ne veux pas mettre d'auto-increment en place)
Par défaut pour insérer un nouvel élément je fais un max(id) +1
Mais reprenons mon histoire ... J'ai donc les valeurs : 1 - 2 - 3 - 4 - 5 - 6 - 7
Je delete le [4] et le [6] par exemple.
A l'insert suivant, comme a l'habitude je fais un max(id)+1. Ce qui en toute logique me renvoi 8.
Mais voilà, j'aimerai que ça me renvoi tout d'abord [4], puis le [6] avant le 8. En gros je souhaite combler les "trous" ...
J'ai essayé différents scripts. Différentes méthodes (comme un select id order by id DESC) puis dans une boucle je viens mettre un $i et si la comparaison des deux n'est pas =, c'est qu'il y a un trou...
Mais je trouve cela trop lourd.
Avez vous une idée simple, et pratique.... (sql pure ou PHP ??? ou les deux...)
Je dois en effet faire cela sur plusieurs tables, contenant des milliers d'enregistrements !!
Une solution serait effectivement de faire un select de tout tes id en ordre croissant et de faire une boucle qui detecterais les trou. Mais plus tu aurais d'enregistrement plus ce serait lourd.
une autre plus efficace , serait de faire une table qui stockerais les id des enregistrement que tu supprimes. Lors d'une nouvelle insertion , tu récupere le premier et tu le supprimes de la table des "déchets". Ce n'est pas forcement plus rapide mais ça à l'avantage de ne pas s'alourdir avec le temps.
merci de ta réponse. Ce que je n'ai pas dit, c'est que ma clé n'est pas unitaire. Il s'agit en fait d'une terce. Pour chaque $GID il exsite 0 à plusieurs $CID Chaque $CID ayant de 0àn $ID
Ce systeme étant identique sur une 15aine de tables différentes. Donc une table sup. ''Dechet'' est difficile à mettre en place. Au final les requêtes vont être également trop lourdes. ... A mon sens... Je me trompe peut être....