Avatar billede zuiq Nybegynder
04. september 2005 - 14:04 Der er 9 kommentarer og
1 løsning

Rækkefølge opsætning

Hey,

Jeg har et spørgsmål - hvordan laver man et script der gør en istand til manuelt at ændre rækkefølgen på en række posts?

Mvh.
Mads
Avatar billede cpufan Juniormester
04. september 2005 - 14:07 #1
jeg tror du skal forklare lidt mere, men her er et bud

hvis det er et udtræk fra en db:

sql = "select * from tabel order by " &request("inputfrabrugeren")
Avatar billede ellebaek Nybegynder
04. september 2005 - 16:05 #2
du skal have en del argumenter med som querystrings...

fx.
<%
' finder brugerens inputs...
order = request.querystring("order")
vej = request.querystring("vej")
if order = "" then
  order = "navn"
end if
if vej = "" then
  vej = "asc"
end if

'Henter oplysninger fra databasen. Husk at rette navnet på tabellen.
sql = "SELECT * FROM tabel ORDER BY " & order & " " & vej & ""
'eksekvere sql-strengen. Husk at have et recordset med navnet rs, eller også skal du rette det i næste linie.. kun på højre side af: =-tegnet.
set rs = rs.execute(sql)
'Hvis der ikke er nogen resultater i databasen.
if rs.eof then
  response.write "Der er ingen resultater"
else
response.write "<table><tr>"
'skriver header sektionen til tabellen. her skal rettes så det passer med hvordan brugeren kan ændre rækkefølgen på tingene. variablen order er feltet der skal sorteres efter. variablen vej er hvilken retning. ASC for ascending (1, 2, 3) DESC for descending (3, 2, 1)
if request.querystring("order") = "navn" then
  if request.querystring("vej") = "asc" OR request.querystring("vej") = "" then
    response.write "<td><a href="?order=navn&vej=desc">Navn</a></td>"
  else
    response.write "<td><a href="?order=navn&vej=asc">Navn</a></td>"
  end if
elseif request.form("order") = "alder" then
  if request.querystring("vej") = "asc" OR request.querystring("vej") = "" then
    response.write "<td><a href="?order=alder&vej=desc">Alder</a></td>"
  else
    response.write "<td><a href="?order=alder&vej=asc">Navn</a></td>"
  end if
end if
response.write "</tr>"
'skriver indholdet fra databasen...
while not rs.eof then
  response.write "<tr><td>" & rs("navn") & "</td>"
  response.write "<td>" & rs("alder") & "</td></tr>"
  rs.movenext
wend
end if
rs.close
set rs=nothing
%>
 
Håber du kan bruge ovenstående...
Jeg har skrevet nogle kommentare som forklare hvordan det virker og hvad der skal rettes for at få det til at funke...

Mvh. Jens
Avatar billede nielle Nybegynder
04. september 2005 - 20:44 #3
Svært at vurdere når nu zuiq endnu ikke har givet nogen tilbagemelding, men jeg tror at spørgsmålet drejer sig om noget lidt andet.

Først indføre du et talfelt, som angiver den ønskede rækkefølge af sine poster. Jeg plejer at kalde dette felt for ordering, og den tilhørende SQL ser sådan ud:

SELECT * FROM dinTabel ORDER BY ordering ASC

Feltet ordering skal indeholde tallene 0, 1, 2, 3, osv. Hvor 0 altså betyder at den pågældende række kommer allerførst når data udtrækkes, og den aller største værdi tilhøre den række som skal komme allersidst.

Hvis man vil bytte om på rækkefølgen mellem to poster, så bytter man simpelthen om på værdierne i feltet ordering:

Id1 = 4
Id2 = 2

SQL = "SELECT ordering FROM dinTabel WHERE id=" & Id1
Set rs = Conn.Execute(SQL)
Ordering1 = rs("ordering")

SQL = "SELECT ordering FROM dinTabel WHERE id=" & Id2
Set rs = Conn.Execute(SQL)
Ordering2 = rs("ordering")

SQL = "UPDATE dinTabel SET ordering=" & Ordering2 & " WHERE Id=" & Id1
Conn.Execute(SQL)

SQL = "UPDATE dinTabel SET ordering=" & Ordering1 & " WHERE Id=" & Id2
Conn.Execute(SQL)
Avatar billede zuiq Nybegynder
05. september 2005 - 16:59 #4
hej, det er nielle der har fat i den lange ende :)

det du har lavet dér, så langt er jeg selv kommet - men det jeg tænker er hvis man nu har lavet en rækkefølge på 200 poster, men så ændre rækkefølgen på en post - så skal (næsten) alle de andre posters rækkefølge laves om - er der nogen smart måde at gøre det på?

undskyld jeg ikke formulerede mig klarere før.
Avatar billede nielle Nybegynder
05. september 2005 - 18:22 #5
Du bliver nok lige nødt til at uddybe hvad du mener med at man ændre rækkefølgen på en enkelt række?
Avatar billede zuiq Nybegynder
05. september 2005 - 20:08 #6
Altså f.eks. jeg har følge rækkefølge med 5 posts (der nummer i rækkefølgen er defineret på den enkelte, på den måde du også brugte):
1. post 2
2. post 3
3. post 1
4. post 5
5. post 4

hvis jeg så sætter en ny post ind mellem 3 og 4, så skal posts 4 og 5 ha nyt nummer i rækkefølge. Eller hvis jeg tager posten på 1. pladsen og rykker den hen til 4. pladsen - så er der jo også en del af de andre posts der skal opdateret/ha' ændret nummer i rækkefølgen :)
Avatar billede nielle Nybegynder
05. september 2005 - 20:21 #7
Indskydning af en række midt inde imellem dine andre rækker kan foregå på denne måde:

InsertSorting = 42  ' Rækken skal indsættes på den plads som svare til nr 42 i rækken.

SQL = "UPDATE dinTabel SET sorting=sorting+1 WHERE sorting >= " & InsertSorting
Conn.Execute(SQL)

SQL = "INSERT INTO dinTabel (ditFelt1, ditFelt2, sorting) VALUES ('a', 123, " & InsertSorting & ")
Conn.Execute(SQL)
Avatar billede zuiq Nybegynder
05. september 2005 - 20:41 #8
aaah smart, og når man skal rykke et post skal man jo bare 'slette' posten fra dens placering (gøre det modsatte af når man indsætter, altså sorting=sorting-1 for storting <=) - og så indsætte den på det ønskede sted på samme måde du for har forklaret :)!

smart hehe, smid et svar, så får du points.
Avatar billede nielle Nybegynder
05. september 2005 - 21:06 #9
Det skal nu nok snare være:

DeleteSorting = 42  ' Rækken skal slettes svare til nr 42 i rækken.

SQL = "DELETE FROM dinTabel WHERE sorting = " & DeleteSorting
Conn.Execute(SQL)

SQL = "UPDATE dinTabel SET sorting=sorting-1 WHERE sorting > " & DeleteSorting
Conn.Execute(SQL)

... eller du kan bare lade hullet i sorterings-rækkefølgen være.
Avatar billede nielle Nybegynder
05. september 2005 - 21:06 #10
... og et 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
Kurser inden for grundlæggende programmering

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