webForumDet fria alternativet

uppdatera nummerordning vid delete/update

ASP

10 svar · 358 visningar · startad av tlee

Medlem sedan mars 2001290 inlägg
Frågan#1

Hej.

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.

Tack på förhand.

/t

Medlem sedan dec. 20003 887 inlägg
#2

Möjliga lösningar :)

Scenario 1

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
Medlem sedan mars 2001290 inlägg
#3

grymt.. funkar utmärkt.

Medlem sedan apr. 20031 660 inlägg
#4

HEJ!

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!

Medlem sedan dec. 20003 887 inlägg
#5

J.N. skrev:

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.

Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Engine^ skrev:

J.N. skrev:

HEJ!

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!

Medlem sedan mars 2001290 inlägg
#7

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?

Medlem sedan mars 2001290 inlägg
#8
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

så ser koden ut.

Medlem sedan dec. 20003 887 inlägg
#9

tlee skrev:

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?

Medlem sedan mars 2001290 inlägg
#10

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..

Medlem sedan mars 2001290 inlägg
#11
intArticlePosition = cint(Request.Form("txtArticlePosition"))
intOldArticlePosition = cint(request.form("txtOldArticlePosition"))

doh..

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)