Jag har artiklar som sorteras efter ett fält som heter fldPosition där jag matar in 1,2,3,4 beroende på i
vilken ordning jag vill att mina artiklar skall visas. Jag kan manuellt gå in och sätta värdet på fldPosition.
Scenario 1.
Jag har 50 artiklar med position 1-50 och väljer att plocka bort nummer 25. Då blir det ett glapp
mellan nummer 24 och 26 (23,24,26,27). Önskvärt här är att positionerna från och med 26 minskas med (-1) så att
26=25, 27=26 osv. Hur löser jag det smidigast?
Scenario 2.
Samma som ovan fast istället för att ta bort en artikel så uppdaterar jag positionen från 28 till 24. Det
ser då ut såhär 23,24,24,25,26,27,29. Önskvärt här är att den gamla 24 blir nya 25 och den fortsätter uppdatera
resten av fälten så att vi får numren i följd. Sen får man ju ett glapp mellan 27 och 29 där gamla 28 var som måste fyllas igen med position 29(-1 och sen 30-1 osv). Hur löser man allt detta på ett snyggt sätt.
update tabell
set fldPosition = fldPosition - 1
where fldPosition > 25
Scenario 2
update tabell
set fldPosition = -1
where fldPosition = 28
update tabell
set fldPosition = fldPosition + 1
where fldPosition between 24 and 27
update tabell
set fldPosition = 24
where fldPosition = -1
Men, det är väl ingen lösning??? :l
Hur fungerar det när det är artikel 12 som ska flyttas till 22, och 43 till 25?
Det du behöver är en listruta där du flyttar artiklarna i den ordning du vill ha dem, och sedan spar dem. Du skapar en variabel som håller reda på positionen, och spar ned den med artikel, och sedan sorterar du efter den.
Har nämligen precis idag justerat till ett admin efter detta!
Men, det är väl ingen lösning??? :l
Hur fungerar det när det är artikel 12 som ska flyttas till 22, och 43 till 25?
Detta efterfrågades inte, men det är inga problem att bygga vidare sql-uttryck som tar hand om det.
Njae, inte direkt, men eftersom du tillhör dem som ger bra svar blev jag lite förvånad över ett svar som endast löste det givna scenariot. Jag tolkade nämligen ordet "scenario" som exempel.
Du tipsade om BETWEEN för att lösa problemet, men det löser endast problemet för stunden. Dock är ju tlee nöjd, så det kanske endast var ett engångsproblem!
jag har faktiskt stött på ett problem.. allt fungerar när jag flyttar upp och ner mellan 1-9 och t.ex 11-19. .. men om jag flyttar från 1 till 15 så blir det knas.. vad kan det bero på.. fältet är en int ... kanske skall ändra från 1 till 01 så det blir tvåsiffrigt?
strGroup = Request.Form("txtArticleGroup")
intArticlePosition = Request.Form("txtArticlePosition")
intOldArticlePosition = request.form("txtOldArticlePosition")
intId = request.form("txtId")
if not intArticlePosition = intOldArticlePosition then
'-- ändring av positionen har skett.
strSQL_update_1 = "update tblProductArticles set fldArticlePosition = -1 where id = " & intId
'-- kolla om du ökar eller sänker en position på en artikel
if intArticlePosition > intOldArticlePosition then
strSQL_update_2 = "update tblProductArticles set fldArticlePosition = (fldArticlePosition - 1) " & _
"where fldArticlePosition between " & intOldArticlePosition & " and " & intArticlePosition & _
" and (fldArticleGroup='"& strGroup &"');"
end if
if intArticlePosition < intOldArticlePosition then
strSQL_update_2 = "update tblProductArticles set fldArticlePosition = (fldArticlePosition + 1) " & _
"where fldArticlePosition between " & intArticlePosition & " and " & intOldArticlePosition & _
" and (fldArticleGroup='"& strGroup &"');"
end if
strSQL_update_3 = "update tblProductArticles set fldArticlePosition = " & intArticlePosition & _
" where id = " & intId
Set recUpdate = Connect.Execute(strSQL_update_1)
Set recUpdate = Connect.Execute(strSQL_update_2)
Set recUpdate = Connect.Execute(strSQL_update_3)
end if
jag har faktiskt stött på ett problem.. allt fungerar när jag flyttar upp och ner mellan 1-9 och t.ex 11-19. .. men om jag flyttar från 1 till 15 så blir det knas.. vad kan det bero på.. fältet är en int ... kanske skall ändra från 1 till 01 så det blir tvåsiffrigt?
Vad får du för felmeddelande och hur ser den aktuella sql-satsen ut?
jag får inget felmeddelande utan om jag flyttar från pos 12 till pos7 får jag två stycken 7:or 6,7,7,8 och sen 10,11,13 .. detta får jag inte om jag flyttar från 9 till 5 ... skumt va..