Gå til innhold

Finne laveste, ledig id i mySQL-database med PHP


Anbefalte innlegg

Jeg har tre tabeller i min mySQL-database. Hver tabell inneholder filer med forskjellige id’er. Men når jeg bygget opp tabellene ble mange av filene slettet, og mange id’er står nå tomme. Det har blitt utrolig rotete, og jeg vil nå rydde opp i rotet. Derfor vil jeg nå, at hver gang jeg legger ut en ny fil, henter den automatisk den laveste id’en som er ledig. Det er viktig at filene som allerede er i databasen ikke får endret sin id, siden den er en del av filens filnavn. Men hvordan gjør jeg det? :hmm:

Lenke til kommentar
Videoannonse
Annonse

Siden du ikke "vet" nøyaktig hvilke ID'er som er ledig så må du nødvendigvis gjøre en egen query slik:

 

F.eks. (mysql syntax litt rusten, men du skjønner hvor jeg vil)

 

select <yourID> from <table> where <emptyField>="" order by <yourID> ASC;

 

Den vil (forhåpentligvis) velge ut de ID'ene som er tomme i ascending (minste først) rekkefølge. Da kan du bare benytte deg av den ID'en som finnes i den første posten som ble hentet ut.

 

Synes forøvrig forslaget om et eget "cleanup" script er en bedre løsning...

Lenke til kommentar

Jeg tror du tenker i feil baner.

 

ID-feltet skal kun gi rader en unik identifikator. Ikke noe annet.

 

At de således ikke følger nødvendigiv i rekkefølge er irrelevant.

 

Hvis du mener du trenger en teller som teller fra 1 til 10 uten opprom, så er det noe annet enn den unike id'en du er ute etter. Lag deg en kolone som gjør nettopp dette.

 

alter table tabellnavn add column teller int unsigned;
set @i:=0;
update tabellnavn set teller=@i:=@i+1;

Lenke til kommentar

Skal prøve å forklare litt bedre:

 

Her er tabellene med dataene:

(alle navnene er forskjellige)

 

Tabell01:

id:1,navn:x

id:2,navn:x

id:5,navn:x

 

Tabell02:

id:7,navn:x

id:8,navn:x

id:12,navn:x

 

Tabell03:

id:13,navn:x

id:17,navn:x

id:20,navn:x

 

Adressen til filene er <id>.exe, så id'en til hvert fil kan ikke endres. Derfor kan jeg ikke bruke auto_increment. Jeg sletter også til tider filer.

Som du ser er den laveste id'en som er ledig blant de tre tabellene 3, så 4,6,9,10,11 osv.

Et "cleanup"-script er en grei ide, men da må den endre mange av navnene på selve filene på serveren. Og i min virkelige database er det flere tusen filer.

 

EDIT:

Tenkte noe som dette: SELECT * FROM Tabell01,Tabell02,Tabell03 WHERE id='IKKE FINNES' ORDER BY id ASC

Vet at denne spørringen ikke vil fungere, men den "forklarer" litt hva jeg prøver å si :roll:

Endret av simenss
Lenke til kommentar

Enig, det virker som en dårlig ide å bruke filnavn som id.

 

lag deg en id uavhengig av filnavn og alt annet. en id skal ikke være noe annet enn en unikt identifiserende karakteristika. id'er skal heller ikke trenge å følge noe eksternt "skjema", eks. ha kontinnuerlig stigende tall uten hull. filer kan dessuten endre navn.

Lenke til kommentar
Enig, det virker som en dårlig ide å bruke filnavn som id.

 

lag deg en id uavhengig av filnavn og alt annet. en id skal ikke være noe annet enn en unikt identifiserende karakteristika. id'er skal heller ikke trenge å følge noe eksternt "skjema", eks. ha kontinnuerlig stigende tall uten hull. filer kan dessuten endre navn.

Sånn jeg har forstått det er det omvendt, han bruker IDen som filnavn, men vil kunne bruke samme IDen flere ganger....

 

 

En annen ting: hvorfor har du tre forskjellige tabeller som alle sammen har filer? en tabell må da holde, og så har du tre forskjellige kategorier filene kan havne i?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...