Avatar billede max33 Nybegynder
10. marts 2014 - 08:30 Der er 11 kommentarer og
1 løsning

genbrug medarbejder nr.

Hej

Jeg har en tabel med ID, Medarbejder nr., Navn osv.

Når jeg sletter en medarbejder, kommer der et ledigt medarbejder nr,    som jeg gerne vil genbruge, hvordan gør jeg lettest dette.

ID  Med.Nr.  Navn
1    1      a.a.
2    2      b.b.
3    3      c.c.

Sletter Medarbejder 2 og opretter ny medarbejder 2.

ID  Med.Nr.  Navn
1    1      a.a.
3    3      c.c.
4    2      d.d.

Men hvordan finder jeg ud af at medarbejder 2 er den første ledige medarbejder nr.?
Avatar billede repox Seniormester
10. marts 2014 - 10:29 #1
Vil du genbruge et autoinkrementeret id?
Avatar billede max33 Nybegynder
10. marts 2014 - 12:13 #2
#1
Nej, jeg vil ikke bruge et autoinkrementeret id!

Men vil genbruge det medadrbejder nr som er slettet og oprettet det til en ny medarbejder.

Faktisk som jeg har prøvet at vise i mit første punkt.

sletter medarbejder med id 2 og nr 2

og vil så gerne oprette en medarbejder med id 4 og nr 2.
Avatar billede repox Seniormester
10. marts 2014 - 12:29 #3
Ideelt ville du jo have en liste over tilgængelige medarbejdernumre, som du kan holde op mod din liste af medarbejdernumre i brug. Så kan du køre disse to sammen og sammenligne.
Avatar billede max33 Nybegynder
10. marts 2014 - 12:41 #4
#3
Du mener at hver gang jeg sletter en medarbejder skal jeg oprette medarbejder nr i en anden tabel.

Når man så skal oprette en ny kigger man og der er nogen ledig i denne tabel før man oprette et nyt.
Avatar billede repox Seniormester
10. marts 2014 - 13:00 #5
Ikke nødvendigvis, men trods alt en mulighed.

Forestil dig dette.
Du har et interval på 50 medarbejder-numre (det er et statisk tal).
Lad os bare for eksemplets skyld sige at de er mellem 1 og 50.

Hvis en medarbejder er blevet slettet i databasen, kunne du godt tænke dig at genbruge det medarbejdernummer der har det laveste nummer først.

$employee_numbers = range(1,50);
$sql = "SELECT employee_number FROM employees";
$result = $mysqli->query($sql);
while( $row = $result->fetch_object())
{
  if($pos = array_search($employee_numbers))
  {
    unset($employee_numbers[$pos]);
  }
}

// Første ledige medarbejder nummer i nummerisk rækkefølge
echo current($employee_numbers);

Avatar billede max33 Nybegynder
10. marts 2014 - 13:20 #6
#5
Kan godt se det som en mulighed.

Er det udelukket at man kan lave det som en ren sql foresprøgelse?

har pt. over 2000 nr. minus dem som mangler.
Avatar billede arne_v Ekspert
10. marts 2014 - 14:33 #7
Betaler I dumme bøde til gangstere udfra højeste medarbejder nummer som i bruger?

:-)

Jeg har svært ved at se værdien for virksomheden ved at bruge tid of resourcer på at genbruge medarbejder numre.

Hvis du absolut vil kan du vælge at tilfoeje nummer til en free list ved slet og fjerne det igen naar du bruger det eller du kan vaelge at soege efter et ledigt ved oprettelse.

Utestet:

SELECT mednr-1 FROM tabel WHERE mednr > 1 AND mednr-1 NOT IN (SELECT mednr FROM tabel) LIMIT 1
Avatar billede max33 Nybegynder
10. marts 2014 - 15:21 #8
Hej Arne

Det var lige det jeg skulle bruge, har lige hurtigt testet det, og ser ud til at virke, men...

Hvad sker der når der ikke er flere ledige med.nr. tager den så bare det næste?
Avatar billede arne_v Ekspert
10. marts 2014 - 15:32 #9
saa returnerer den query ikke noget og du skal bruge en anden query til at finde et nr + formentligt den berygtede:

SELECT MAX(mednr)+1 FROM tabel
Avatar billede arne_v Ekspert
10. marts 2014 - 15:33 #10
Og hvis du skal have ordentlig beskyttelse med samtidigheds problemer, saa skal du altsaa lave lidt! Men du kan starte med et unikt indeks paa mednr.
Avatar billede max33 Nybegynder
10. marts 2014 - 20:55 #11
arne du kommer bare med et svar så får du point
Avatar billede arne_v Ekspert
10. marts 2014 - 23:28 #12
svar
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
Computerworld tilbyder specialiserede kurser i database-management

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