|
| Indsæt ny post på ledigt ID nr... Fra : Magnus |
Dato : 19-03-07 18:16 |
|
SQL="INSERT INTO Nyhed (dato, kategori) values('2007-03-19','KATEGORI')
Med denne linie indsætter jeg en ny post i MySQL og den "Primary key" (id)
bliver automatisk et nr højere end den højeste.
Men hvis jeg har en massse "ledige" id numre mellem alle mine poster er der
ikke en måde hvor jeg let kan indsætte nye poster på de poster der mangler
uden via en alm. SELECT som gennemløber alle poster og finder de id numre
som er ledige i rækken?
Id
1
2
3
5
6
Så vil jeg automatisk indsat en ny post på det ledige id nr 4.
/Magnus
| |
Leif Neland (19-03-2007)
| Kommentar Fra : Leif Neland |
Dato : 19-03-07 20:14 |
|
Magnus wrote:
> SQL="INSERT INTO Nyhed (dato, kategori)
> values('2007-03-19','KATEGORI')
> Med denne linie indsætter jeg en ny post i MySQL og den "Primary key"
> (id) bliver automatisk et nr højere end den højeste.
>
>
> Men hvis jeg har en massse "ledige" id numre mellem alle mine poster
> er der ikke en måde hvor jeg let kan indsætte nye poster på de poster
> der mangler uden via en alm. SELECT som gennemløber alle poster og
> finder de id numre som er ledige i rækken?
>
Hvorfor vil du gøre det? Det er er en rigtig dårlig ide at genbruge
id-numre.
Hvis der nu er nogen, enten dig selv, eller især nogen ude i verden, der
refererer til din nyhed nr 4, så er det da bedre at de får at vide at den
ikke findes, frem for at de får en helt anden nyhed.
Emnet har været oppe i gruppen her for ikke så længe siden, og der var
eksemplet at en ny kunde ikke ville være glad for at overtage en gammel,
slettet kundes ordrer og gæld.
Id-numre bør være interne og uforandrerlige.
Så kan du altid bruge et felt til kundenummer eller rækkefølge, som du kan
ændre i efter behov.
Leif
| |
Magnus (19-03-2007)
| Kommentar Fra : Magnus |
Dato : 19-03-07 20:41 |
|
> Hvorfor vil du gøre det? Det er er en rigtig dårlig ide at genbruge
> id-numre.
>
> Hvis der nu er nogen, enten dig selv, eller især nogen ude i verden, der
> refererer til din nyhed nr 4, så er det da bedre at de får at vide at den
> ikke findes, frem for at de får en helt anden nyhed.
>
> Emnet har været oppe i gruppen her for ikke så længe siden, og der var
> eksemplet at en ny kunde ikke ville være glad for at overtage en gammel,
> slettet kundes ordrer og gæld.
>
> Id-numre bør være interne og uforandrerlige.
>
> Så kan du altid bruge et felt til kundenummer eller rækkefølge, som du kan
> ændre i efter behov.
Det er helt rigtigt. Nu nævnte jeg bare et eksempel med nyheder men det det
er sådan at jeg har et fotoalbum hvor hvert billed har et id nr hvor der
ligger oplysninger om billedet. I forbindelse med ombygningen af
fotoalbummet skulle jeg overføre alle værdierne fra en tabel til en anden og
der gik noget galt så jeg endte med at have poster med id nr 1, 2 3 osv. op
til ca. 7800 men også et par hundrede som har id nr 50000 og 2-300 derefter.
Når jeg indskriver nye poster bliver det over de ca. 50300 mens jeg helst
ville fortsætte fra de 7800 til jeg når det 50000 automatisk.
Det med at henvise en slettet nyhed (billed) bliver aldrig aktuelt da jeg
ikke sletter poster billeder.
/Magnus
| |
Leif Neland (19-03-2007)
| Kommentar Fra : Leif Neland |
Dato : 19-03-07 22:00 |
|
Magnus wrote:
> Det er helt rigtigt. Nu nævnte jeg bare et eksempel med nyheder men
> det det er sådan at jeg har et fotoalbum hvor hvert billed har et id
> nr hvor der ligger oplysninger om billedet. I forbindelse med
> ombygningen af fotoalbummet skulle jeg overføre alle værdierne fra en
> tabel til en anden og der gik noget galt så jeg endte med at have
> poster med id nr 1, 2 3 osv. op til ca. 7800 men også et par hundrede
> som har id nr 50000 og 2-300 derefter.
> Når jeg indskriver nye poster bliver det over de ca. 50300 mens jeg
> helst ville fortsætte fra de 7800 til jeg når det 50000 automatisk.
> Det med at henvise en slettet nyhed (billed) bliver aldrig aktuelt da
> jeg ikke sletter poster billeder.
>
Hvis du insisterer...
Jeg ville lave en hjælpetabel, der kun indeholder en række med et enkelt
felt, der er det næste kendte ledige nummer.
Når du så vil indsætte, prøver du med det nummer. Findes er det optaget,
prøver du med næste osv.
Når det lykkes at finde et ledigt nummer, bruger du det, og gemmer så det
næste i hjælpetabellen.
Så slipper du for at starte forfra hver gang, og hvis der kun er et stort
interval med ledige numre, er der kun en større søgning første gang.
Er der mange små intervaller, kan du lade søgningen køre i baggrunden, f.ex.
et par forsøg pr gang en side loades. Så er der næsten altid fundet et
ledigt hul, når der er brug for det.
Leif
| |
|
|