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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Numero de Clé effacé = Pris par Enregistrment suivant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Numero de Clé effacé = Pris par Enregistrment suivant

n°1203240
math03
Posté le 20-09-2005 à 13:18:00  profilanswer
 

Voila j'ai une base de donnée sur mysql.
 
Mais j'ai un soucis. J'aimerais que lorsque je supprime un enregistrement, l'enregistrement qui suivra (un nouveau donc) prendra sa place. PLus explicitement son id soit repris. Alors que pour le moment chaque numero n'est utilisé qu'une fois meme si il n'existe plus.
 
Merci de vos reponses.

mood
Publicité
Posté le 20-09-2005 à 13:18:00  profilanswer
 

n°1203268
flo850
moi je
Posté le 20-09-2005 à 13:39:29  profilanswer
 

impossible ( a ma connaissance ) avec un champ en auto_increment ( ce qui est souvent le cas des cles
il faut le gerer a la main  
 
par exemple :  une table contient les idnex effacés ( donc dispos )  
quand tu veux faire un insert > tu regarde si la table d'index effacée est vide  
Si oui tu pioche un index  
si non tu genere un nouvel index

n°1203285
math03
Posté le 20-09-2005 à 13:48:20  profilanswer
 

oulalal on se calme.... :-D
 
Comment on fait pour voir l'index effacé. J'utilise easyphp. Et quand je gere mes dbs ben je voient les index effacées je ne vois que les enregistrements. Y a t-il donc un moyen/ fonction qui peut recupérs la premiere clé effacé trouvé ?

n°1203290
esox_ch
Posté le 20-09-2005 à 13:49:53  profilanswer
 

Tu recupere la liste des id et tu la parcours pour voir lesquels manques [:spamafote]


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203296
flo850
moi je
Posté le 20-09-2005 à 13:51:12  profilanswer
 

esox_ch a écrit :

Tu recupere la liste des id et tu la parcours pour voir lesquels manques [:spamafote]


 
efficace , mais un peu gourmand

n°1203327
math03
Posté le 20-09-2005 à 14:02:57  profilanswer
 

vi ca risque d'etre tres gourmand sur 4000 enregistrement. Faudrait un moyen que je recupere a partir du 1 er enregistrement l'index qui me manque ? J'ai un logiciel de gestion de bibliotheque qui fait ça a mon boulot, donc il doit bien y avoir un moyen que j'y arrive aussi j'espere.
 
Merci de votre aide

n°1203380
esox_ch
Posté le 20-09-2005 à 14:32:33  profilanswer
 

flo850 a écrit :

efficace , mais un peu gourmand


 
Comme toutes les operations de recompactage ... D'ailleurs je vois pas a quoi ça peut lui servir de faire ça ... En general ce genre de besoin nait d'une mauvaise conceptualisation du projet


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203448
math03
Posté le 20-09-2005 à 15:05:43  profilanswer
 

merci du compliment.... c'est juste que je veux que ma fiche correspond a un livre avec un numero unique ainsi chaque livre a inscrit a la 1ere page ce numero. Ce numero me sert pour les prets. Je tape le nom de l'emprunteur et le numero du livre et paf le pret est effectué. Donc si il m'arrive de faire une erreur de saisie et que j'ai besoin de supprimer une fiche j'aimerais pouvoir utiliser encore ce numero unique.  
 
Bref evite de juger mon travail s'il te plait et donne plutot un coup de main. Merci

n°1203458
esox_ch
Posté le 20-09-2005 à 15:10:11  profilanswer
 

Désolé mais la c'est ta structure qui a un probleme. Si tu supprimes une fiche, pas grave, l'ID sera supprimé avec et on repartira avec le suivant.. Il faut pas te dire "zut, si je laisse des trou dans l'id ca sera lent et je serais plus vite limité en nombre" , ce genre de probleme n'apparait eventuellement que sur des masses de données assez pharamineuses, dont tu es tres tres loin


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203470
math03
Posté le 20-09-2005 à 15:16:00  profilanswer
 

cela ne vient pas d'un soucis de lenteur mais que chaque livre a ce numero inscrit et doivent se suivre. Si par malheur je supprime un livre (numero 1042) et que je doive le re-rentrer il devra obtenir le meme nombre car c'est celui sur le bouquin.Je me vois mal le raturé. apres je peux pt-etre creer un champs a part qui differe de l'index mais le hic estle meme : comment faire pour retrouver un numero qui n'est pas dans la suite (1-2-3-5 par exemple ici trouver que le numero a mettre c'est le 4) ?

mood
Publicité
Posté le 20-09-2005 à 15:16:00  profilanswer
 

n°1203474
esox_ch
Posté le 20-09-2005 à 15:18:38  profilanswer
 

La methode "bourrine mais qui marche" , c'est de créer une table avec l'id de tes livres en autoincrementable, et l'id dont il est question ici. Si tu te loupes tu flingues une ligne de la table qui contient un id mais pas celui de la table des livres, il te suffira d'en remettre un neuf par la suite


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203486
math03
Posté le 20-09-2005 à 15:24:37  profilanswer
 

ouais c'est vrai que ca fait tres bidouille mais je ne peux exclure cette solution. Je me la garde sous le coude en attendant un autre solution si il y a . En tout cas merci de ton aide et j'attends d'autres avis si il y a ...

n°1203490
esox_ch
Posté le 20-09-2005 à 15:26:33  profilanswer
 

En tout ca l'idée de recompacter la table c'est a exclure tout de suite, c'est le genre d'operation tres lourde pour la base.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203518
math03
Posté le 20-09-2005 à 15:42:46  profilanswer
 

recompacter ca redonne un nouvelle index ? Du coup meme si c'etait pas lourd ca n'irait pas dans mon cas car il decalerait les index nan ?

n°1203521
skeye
Posté le 20-09-2005 à 15:48:18  profilanswer
 

Perso je garderais 2 'index'...un interne à la base, en autoincrement, et un second qui apparait sur les bouquins...


---------------
Can't buy what I want because it's free -
n°1203534
esox_ch
Posté le 20-09-2005 à 15:54:53  profilanswer
 

skeye a écrit :

Perso je garderais 2 'index'...un interne à la base, en autoincrement, et un second qui apparait sur les bouquins...


 
C'est la version propre de ce que je lui ai proposé, mais ca l'obblige a faire un minimum de calculs .. Alors qu'en ayant 2 tables non .. mais je suis d'accord sur le fait que ta solution est bien plus optimisée


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203875
math03
Posté le 20-09-2005 à 21:49:23  profilanswer
 

skeye a écrit :

Perso je garderais 2 'index'...un interne à la base, en autoincrement, et un second qui apparait sur les bouquins...


mais comment faire pour savoir quel numeo manque dans cette seconde index ? une boucle qui verifie que les nombres se suivent jusqu'au fameux numero ? ca me parait lourd nan ?

n°1203935
esox_ch
Posté le 21-09-2005 à 07:16:24  profilanswer
 

math03 a écrit :

mais comment faire pour savoir quel numeo manque dans cette seconde index ? une boucle qui verifie que les nombres se suivent jusqu'au fameux numero ? ca me parait lourd nan ?


Bein c tt le probleme de ton systeme... L'architecture serait a revoir parceque sinon toute solution est lourde

n°1203943
skeye
Posté le 21-09-2005 à 07:44:30  profilanswer
 

math03 a écrit :

mais comment faire pour savoir quel numeo manque dans cette seconde index ? une boucle qui verifie que les nombres se suivent jusqu'au fameux numero ? ca me parait lourd nan ?


Tu dois pouvoir trouver le premier non utilisé en une requête, non?


---------------
Can't buy what I want because it's free -
n°1203950
esox_ch
Posté le 21-09-2005 à 08:09:32  profilanswer
 

Abon? Et comment qu'on fait? Ca m'a toujours interessé ..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203954
skeye
Posté le 21-09-2005 à 08:17:55  profilanswer
 

esox_ch a écrit :

Abon? Et comment qu'on fait? Ca m'a toujours interessé ..


Bah un truc du style :
 
select min(a.indice + 1) from table a where not exists (select b.indice from table b where b.indice = a.indice + 1)


---------------
Can't buy what I want because it's free -
n°1203957
esox_ch
Posté le 21-09-2005 à 08:25:27  profilanswer
 

Et b.indice c'est quoi?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1203958
skeye
Posté le 21-09-2005 à 08:28:34  profilanswer
 

esox_ch a écrit :

Et b.indice c'est quoi?


 
Bah b c'est l'alias de la table dans la seconde sous-requête...il faut 2 instances de la table différentes pour pouvoir travailler, là...


---------------
Can't buy what I want because it's free -
n°1203959
skeye
Posté le 21-09-2005 à 08:29:46  profilanswer
 

En gros, je demande à selectionner le plus petit indice (+1) tel que (indice+1) n'existe pas dans la table...


Message édité par skeye le 21-09-2005 à 08:30:14

---------------
Can't buy what I want because it's free -
n°1203988
esox_ch
Posté le 21-09-2005 à 09:15:18  profilanswer
 

Oui ca je l'ai compris, mais que contient la table b ?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1204008
skeye
Posté le 21-09-2005 à 09:43:44  profilanswer
 

esox_ch a écrit :

Oui ca je l'ai compris, mais que contient la table b ?


 
'table' c'est le nom de la table, là... a et b ne sont que des alias!


---------------
Can't buy what I want because it's free -
n°1204040
esox_ch
Posté le 21-09-2005 à 10:20:31  profilanswer
 

a oui merde j'avais loupé le table a et table b ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1204263
math03
Posté le 21-09-2005 à 13:20:40  profilanswer
 

alros table a correspon a la table avec mes id auto-incrementé et table b c'est celle qui correspond au numero des bouquins c'est ça ?
 

n°1204265
esox_ch
Posté le 21-09-2005 à 13:22:10  profilanswer
 

Non c'est pas ça, relit la requete une 2ème fois (chose que j'aurais du faire avant d'ouvrir ma gueule [:petrus75])


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1204280
skeye
Posté le 21-09-2005 à 13:44:17  profilanswer
 

('table' comme nom de table pour mon exemple c'était p-e pas une bonne idée, en fait...[:petrus75])


---------------
Can't buy what I want because it's free -
n°1204309
esox_ch
Posté le 21-09-2005 à 14:07:27  profilanswer
 

nan aurait fallu mettre table1 ou tablePrincipale ou qqch du genre .. Parceque la on peut se dire que table designe 2 trucs differents


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1204312
skeye
Posté le 21-09-2005 à 14:10:08  profilanswer
 

esox_ch a écrit :

nan aurait fallu mettre table1 ou tablePrincipale ou qqch du genre .. Parceque la on peut se dire que table designe 2 trucs differents


 

Code :
  1. select min(a.indice + 1) from majolietableamoi a where not exists (select b.indice from majolietableamoi b where b.indice = a.indice + 1)


 
:o


---------------
Can't buy what I want because it's free -
n°1204422
math03
Posté le 21-09-2005 à 14:58:35  profilanswer
 

oki je vous remerci de votre aide. Je teste ça demaiin et vous tiens au courant...

n°1205900
Arjuna
Aircraft Ident.: F-MBSD
Posté le 23-09-2005 à 14:19:41  profilanswer
 

:??:
 
ca vient peut-être du format de fichier, mais j'ai toujours vu MySQL reprendre justement les trous ! (chose que je n'aime pas du tout d'ailleurs)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Numero de Clé effacé = Pris par Enregistrment suivant

 

Sujets relatifs
[RESOLU] Fonction qui retourne le numero d'un ligne ?? (excel)[Flash-Newbie] Ajout du numéro de slide dans une presentation Flash
Comment supprimer une CLE registre en batch"pointeur +1" pointe l'élément suivant ?
Récupérer le numéro DD d'une machineréinitialiser une clé primaire
Afficher le formulaire suivant en CSS (sans tableaux)[MySQL]cardinalité 1,n -- 1,n et clé étrangere
MySQL : requete suivant le mois en coursComment "cacher" une clé dans un programme ?
Plus de sujets relatifs à : Numero de Clé effacé = Pris par Enregistrment suivant


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