Avatar billede tipsen Nybegynder
28. juli 2003 - 12:13 Der er 9 kommentarer og
1 løsning

Rangordning af databaseposter - hvordan?

Hej eksperter

Jeg har et CMS-system, hvor det for brugeren skal være muligt at angive en rækkefølge/prioritering/rangordning af poster i databasen.

Det kunne eksempelvis være for at styre rækkefølgen af menupunkter der hentes fra en tabel eller for at styre rækkefølgen af medarbejdere i medarbejderoversigten - så chefen er sikker på at stå øverst osv.

På nuværende tidspunkt har jeg lavet det meget simpelt således at der er et felt i tabellen som hedder rang (type int) og posterne sorteres så efter dette tal i stigende rækkefølge. Dvs. hvis man ønsker at en post skal op i hierakiet, skal den have et mindre rang-nummer.

Der sorteres derefter sekundært på andre felter og det kan derfor nogen gange være hensigtsmæssigt, hvis forskellige poster kan have samme rang, således at der måske sekundært sorteres efter eksempelvis navn.

Det uhensigtsmæssige ved dette system er at når brugeren skal vælge rang for eks. en medarbejder foregår det ved at indtaste et tal i en formular (sammen med de øvrige tabeldata) og der er ikke noget at forholde sig til i forhold til de øvrige poster.

I praksis tror jeg ofte det vil være nødvendigt, at undersøge rangen for andre poster inden man får givet den korrekte rang til den post man er ved at rette.

Derfor kunne jeg godt tænke mig at vide om nogen har ideer til en anden form for rangordningssystem, som kan opfylde de samme kriterier som det ovenstående, men måske er lidt nemmere at benytte for brugeren!

Det skal være relativt intuitivt i den formular, hvor rangen vælges og det skal heller ikke give anledning til en kæmpe kompleks db-struktur!

Håber I kan hjælpe med nogle gode ideer og evt. nogle kode-stumper - ideerne har dog højst prioritet, så kan jeg forhåbentlig selv oversætte den gode ide til PHP.

På forhånd tak

Mvh

tipsen
Avatar billede erikjacobsen Ekspert
28. juli 2003 - 12:44 #1
Hvis du vil ændre en persons rang til fx 10, og de andre skal rykke, kan du

  update dintabel set rang=rang+1 where rang>=10
  update dintabel set rang=10 where personid=xxxx
Avatar billede sostack Nybegynder
28. juli 2003 - 13:44 #2
Hvad med:
<select name="rang">
<option value="100">chef</option>
<option value="50">leder</option>
<option value="10">medarbejder</option>
<option value="0">fyret medarbejder</option>
</select>

//sostack
Avatar billede tipsen Nybegynder
28. juli 2003 - 14:21 #3
Erik: Det kan jeg godt se, men det løser stadig ikke problemet med at man på forhånd skal huske hvor stort rang-tallet skal være for at posten kommer ind det rigtige sted.

sostack: Desværre ikke så simpelt idet, rangordningen benyttes i måske 10 forskellige tabeller til medarbejder, links, projekter, udgivelser osv - det med medarbejdere var bare et eksempel.

Det behøver heller ikke være modifikationer af det system jeg har angivet ovenfor - det må gerne være en helt ny ide til hvordan man kan bygge det op - det primære er at det er nemt og intuitivt at bruge samtidig med at det ikke er unødvendigt langsomt at bruge for MySQL!

Overvejede også noget med at man måske kunne vælge rangordningen ved hjælp af en select boks - hvor alle poster var listet - evt. kombineret med et valg om den aktuelle post skal være før, efter eller på niveau med den valgte post.
Avatar billede tipsen Nybegynder
28. juli 2003 - 14:22 #4
Den sidste ide er desuden stadig kompatibel med at rangordningen i tabellen fortsat kan repræsenteres med et tal og dermed være hurtig i brug.
Avatar billede sostack Nybegynder
28. juli 2003 - 14:26 #5
lidt ligesom phpmyadmin's måde at indsætte ekstra kolonner i tabeller ?? (først, sidst, før, efter)

//sostack
Avatar billede tipsen Nybegynder
28. juli 2003 - 14:31 #6
ahh - det var faktisk endnu bedre! Det er måske ikke så tosset - så skal man bare fikse nogle dataforespørgsler der kan matche valgene - således at øvrige rang-numre auto-opdateres.
Avatar billede erikjacobsen Ekspert
28. juli 2003 - 15:03 #7
Tallet 10 var heller ikke ment til at skulle indtastes. Det er fint nok
med en slags "indsæt før", der selv finder det tal, der skal regnes på.
Så mener jeg mine 2 update sætninger stadig virker.
Avatar billede tipsen Nybegynder
28. juli 2003 - 15:20 #8
Erik: Jeg er slet ikke i tvivl om at dine update-sætninger virker!
Avatar billede tipsen Nybegynder
11. november 2003 - 23:37 #9
erik+sostack: Hvis I gider smide et svar, så I kan få lidt point som tak for hjælpen!
Avatar billede tipsen Nybegynder
21. februar 2004 - 23:42 #10
Lukker.
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