Avatar billede ohmish Nybegynder
02. februar 2003 - 07:04 Der er 12 kommentarer og
2 løsninger

skift felt-rækkefølge i mysql

Jeg har lavet en side hvor man kan uploade/slette links til/på siden. Men en vigtig ting, jeg endnu ikke har ku hitt ud af er: hvordan kan brugeren ændre rækkefølgen af felter? Felterne har lige nu id med autoincrement, og jeg bruger "order by id". Hvordan gør jeg så brugeren f.eks kan flytte link nr 5 op øverst.. eller indsætte nyt link som nr. 3 i rækken (istedet for nederst).
Avatar billede ohmish Nybegynder
02. februar 2003 - 07:09 #1
Det jeg mener er: Det skal være muligt at redigere i rækkefølgen af DB-felter.
Avatar billede thulesen Nybegynder
02. februar 2003 - 09:15 #2
Du kan lave et felt (evt. 'orderid'?), som du sorterer fra (order by orderid asc), og så kan du lave noget med at man kan ændre i rækkefølgen på den måde...?
Avatar billede ohmish Nybegynder
02. februar 2003 - 10:44 #3
hvordan vil du flytte et felt med id 9 til nr. 2 i listen?
Avatar billede ohmish Nybegynder
02. februar 2003 - 10:45 #4
man skal kunne redigere i rækkefølgen på kryds og tværs, også når der ER blevet uddelt id's.
Avatar billede _darkstar_ Nybegynder
02. februar 2003 - 11:15 #5
Du skal ikke bruge id-feltet til det. Opret et nyt felt og sæt det i udgangspunktet til samme værdi som id'et. Brug det nye felt til at sortere efter, når du viser elementerne på skærmen. Herefter kan du ændre værdien i det nye felt, hvis du vil ændre rækkefølgen.
Avatar billede arne_v Ekspert
02. februar 2003 - 11:36 #6
Du vil ikke skifte felt-rækkefølge (kolonne-rækkefølge) men
record-rækkefølge (række-rækkefølge).

Det kan du kun gøre ved at indsætte et felt med en værdi som du
kan sortere efter med en ORDER BY clause.

Hvordan brugeren kan opdatere det felt til at give den rigtige
række-følge er ikke et database problem men et applikations-problem.
Avatar billede ohmish Nybegynder
02. februar 2003 - 14:15 #7
ok. jeg bruger php til at styre det... hvis jeg f.eks laver et felt (link-id) ud for hver link der er oprettet, hvori der kan angives rækkefølge 1-xxxx (og så "order by link-id" på siden der viser links'ne). så ville det virke uden tvivl. men hva med skips, hvor brugeren har slettet links? så tælles der måske 1,2,3,11,78. lidt grimt og forvirrende for brugeren. jeg aner ik hvordan jeg ellers ku gøre det muligt at redigere og slette i rækkefølgen af felter. måske er jeg i den forkerte kategori..
Avatar billede ohmish Nybegynder
02. februar 2003 - 14:16 #8
med at lave et felt ud for hver link, mener jeg sefølli et html input-felt
Avatar billede arne_v Ekspert
02. februar 2003 - 14:53 #9
Jeg ville lavde det så at "sorterimgsID" ikke blev vist, men
blev opdateret når brugeren gjorde noget - det er vist re
almindeligt med en "moveup" og "movedown" knap som flytter
current op eller ned i rækkefølgen.

Men det er et applikations-problem - i dit tilfælde et PHP problem.

Database mæssigt skal du bare have feltet og sortere efter det.
Avatar billede ohmish Nybegynder
02. februar 2003 - 15:05 #10
arne_v> jæs! det er lige det jeg mangler... op/ned knap. ka du forklare hvordan jeg kan gøre? det handler jo både om mysql og det grafiske.
Avatar billede ohmish Nybegynder
02. februar 2003 - 15:07 #11
søgefunktionen her på eksperten virker ikke i øjeblikket (for mig ihvertfald)
Avatar billede arne_v Ekspert
02. februar 2003 - 15:18 #12
Hvis du har en tabel med:

id  url    sortid
1    A        1
2    B        2
3    C        3

så henter du data med

SELECT ID,URL FROM T ORDER BY SORTID;

Bemærk du er nødt til at gemme ihvertfald ID
i et array.

Når man så klikker MOVEUP i den n'te række, så laver du:

sortid1 = SELECT SORTID FROM T WHERE ID=id[n-1]
sortid2 = SELECT SORTID FROM T WHERE ID=id[n]
UPDATE T SET SORTID=sortid2 WHERE ID=id[n]
UPDATE T SET SORTID=sortid1 WHERE ID=id[n-1]

og laver en refresh.

Bemærk at du skal sikre dig at 2 brugere ikke kan opdatere de
samme rækker samtidigt !

Hvis man f.eks. gør det på 3. række, så vil man få:

id  url    sortid
1    A        1
2    B        3
3    C        2

og det vil blive vist som:

A
C
B

når de hentes (husk det er ORDER BY SORTID).
Avatar billede ohmish Nybegynder
03. februar 2003 - 07:21 #13
hmm. ja ok. jeg kan ikke rigtigt bruge det, men svaret er jo korrekt såå. her er point
Avatar billede lmejding Nybegynder
30. september 2004 - 18:17 #14
Hej ohmish - jeg har arbejdet ud fra dit svar men har problemer.
Jeg har problemer med [t-1].
Som jeg læser det fanger du det forrige t i array'et, men når jeg gør det skrives intet.
Hvis jeg istedet bruger (t-1) får jeg ikke den forrige værdi men værdien t-1 - som jo ikke nødvendigves er det samme som forrige t i arrayet.

Kan du hjælpe mig med at fange det forrige t?

Set rs = Conn.Execute("Select menuorder from test ORDER By menuorder ")
arrData = rs.GetRows()
Set rs = nothing

If request("flyt") = "venstre" Then
    NowMenu = request("NowMenu")
    NowMenu = int(NowMenu)
    For t = LBound(arrData,2) to UBound(arrData,2)
      If t = NowMenu Then
          response.write [t-1]
           
      End If
    Next
End If
%>
//Lars
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