Avatar billede ofirpeter Nybegynder
08. juli 2004 - 21:33 Der er 10 kommentarer og
1 løsning

Fyld huller i MySQL først

Jeg bruger et script hvor man kan tilføje/slette og ændre et navn. Alt dette foregår fra en MySQL tabel.
Databasen består af et navne felt og et id felt.

Det der plager mig er, at auto_increment  ikke fylder de ID felter som er slettet ud, den ligger bare et tal oven på.

Eks.
Navn  ID
----  --
Eks1  1
Eks2  2
Eks3  3

Det fungere fint nok i starten, men ligeså snart jeg sletter en går det galt, hvis jeg sletter "Eks1" og tilføjer "Eks4" kommer det til at se således ud:


Navn  ID
----  --
Eks2  2
Eks3  3
Eks4  4

Det er lidt dumt i forhold til de ting jeg skal bruge det til. Men kan ikke rigtig overskue en mulighed for at få "tilføj scriptet" til at undersøge om der er ledige pladser. Hvis der er skal den selvfølgelig placeres der, hvis der ikke findes tomme pladser skal den selvfølgelig bare ligge sig som det højeste nummer + 1.
Avatar billede leif Seniormester
08. juli 2004 - 21:38 #1
Lav et nyt felt fx. pladsnummer, Sæt scriptet til at undersøge hvor mange records der er i databasen og der efter først tjeck om 1 er der og bagefter 2 osv. indtil den finder en som ikke er der, så lav din insert.

Auto_increment er en autonummering som er "dum" den logger hvor den er nået til og ligger 1 til.
Avatar billede erikjacobsen Ekspert
08. juli 2004 - 21:47 #2
Er det ikke ligemeget hvad nummer den får?

Du hverken kan eller skal bruge det konkrete nummer i en autonummerering til
noget, ud over at de er forskellige. Og måske også, at jo højere nummer, jo nyere.
Men et dato/tid-felt er nok at foretrække i det tilfælde.
Avatar billede arne_v Ekspert
08. juli 2004 - 21:48 #3
Forskellige forslag:

1) ret i din logik så det ikke er et problem med huller

2) drop MySQL auto_increment og lav dit eget system

3) lav en tabel allnums med et integer felt n og f.eks. 10000 rækker med
  tal 1-10000 og brug en query som:

  SELECT allnums.n FROM allnums LEFT JOIN dintabel ON alnums.n=dintabel.ID WHERE dintabel.ID IS NULL ORDER BY allnums.n LIMIT 1
Avatar billede jakoba Nybegynder
08. juli 2004 - 21:53 #4
det er ikke noget du skal være ked af. det er noget du skal være glad for. Hvis MySQL sådan fyldte hullerne ud ville det være noget nær umuligt at finde fejlen hvis du glemmer at slette faderløse rækker i andre tabeller der har fremmednøgler til den der.

Hvis du absolut vil så er det muligt at omnummerere efter en sletning, men det er rimeligt bøvlet og kræver adskillige MySQL queries.

mvh JakobA
Avatar billede ofirpeter Nybegynder
08. juli 2004 - 22:10 #5
Jeg tror desværre bare jeg er nød til det. Hvis i ser dette sprøgsmål: http://www.eksperten.dk/spm/517648 så vil der gå kage i det, hvis tallende ikke ligger lige efter hinanden.
Avatar billede ofirpeter Nybegynder
08. juli 2004 - 22:17 #6
Tror at arne_v's løsning nr. 3 vil være den bedste, behøver jo ikke mange rækker, da jeg næppe tror min hjemmeside vil komme op på mere end 100 menu punkter :)

Men jeg behøver lidt uddybning af "lav en tabel allnums med et integer felt n"
Avatar billede arne_v Ekspert
08. juli 2004 - 22:19 #7
tabel navn allnums
et felt
felt navn n
felt type integer
100 rækker
værdier 1-100
Avatar billede ofirpeter Nybegynder
08. juli 2004 - 22:44 #8
Nu har jeg siddet og kæmpet lidt, men har svært ved at komme med et ordenligt bud på hvordan jeg kan omskrive denne: mysql_query("update $table_tekst set prio ='$from' WHERE navn ='$ud_to[navn]'"); så den passer til det nye felt.
Avatar billede ofirpeter Nybegynder
13. juli 2004 - 16:37 #9
Jeg løste problemet ved at gøre sådan: http://www.eksperten.dk/spm/518337, hver gang jeg sletter eller tilføjer en fil. Nogle her som ønsker point?
Avatar billede arne_v Ekspert
13. juli 2004 - 18:47 #10
Ikke mig - du har jo ikke brugt nogle af mine ideer.
Avatar billede ofirpeter Nybegynder
15. juli 2004 - 13:24 #11
Da jakoba og erikjacobsen ikke har svaret, og jeg ved i er særdeles aktive herinde, snupper jeg point selv. I er velkommen til at skrive, hvis i alligevel skulle få lyst til en del af kagen :0)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester