webForumDet fria alternativet

Ändra visningsordning

2 svar · 187 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 427 inlägg
#1

Jag har en kolumn vid namn "displayorder" som bestämmer i vilken ordning kategorier ska visas när jag loopar ut dem på en sida. I administrationssystemet ska man kunna klicka på "flytta upp" och kategorin ska då hoppa upp ett steg i ordningen.

Nedanstående kod fungerar tillfredsställande, men det känns som att jag gör det alldeles för svårt för mig. Om någon vet hur jag skulle kunna minska ner kodmängden och åstadkomma samma sak vore det guld om ni ville berätta hur. Anledningen till att jag frågar är att jag tycker mig minnas ha sett ett exempel på detta någonstans på wF som var mycket effektivare.

För att flytta upp kör jag:

UPDATE pers_categories
SET displayorder = displayorder - 1
WHERE displayorder >= (SELECT displayorder FROM pers_categories WHERE categoryid = x)

UPDATE pers_categories
SET displayorder = displayorder + 1
WHERE displayorder >= (SELECT displayorder FROM pers_categories WHERE categoryid = x)
AND categoryid <> x

Och för att flytta ner kör jag:

UPDATE pers_categories SET displayorder = displayorder - 1 WHERE displayorder > 

(SELECT displayorder FROM pers_categories WHERE categoryid = x)

UPDATE pers_categories 
SET displayorder = displayorder + 1 
WHERE displayorder >= (SELECT displayorder FROM pers_categories WHERE categoryid = x) 
AND categoryid <> (SELECT categoryid FROM pers_categories WHERE displayorder = (SELECT displayorder FROM 

pers_categories WHERE categoryid = x)
AND categoryid <> x)

RED: Jag tar tillbaka kommentaren om att det fungerar tillfredsställande, för det gör det inte alls. Om jag flyttar upp den kategori som redan ligger högst upp blir det negativa tal i kolumnen. :r

K@llenMedlem sedan mars 20032 667 inlägg
#2

Lite OT:

Jag vet inte om du vill hålla fast vid den lösning du har nu. Men när jag byggde min persoliga startsida så kan besökaren välja vad som ska visas samt flytta dem i den ordning de vill.

Jag sparar alla id i en kommaseparerad sträng i en cookie, sedan hämtar jag från den ordningen som id är ordade i cookien. Finns ingen cookie finns det en defaultordning som den listar ur.

du kan se hur det fungerar här:
http://merahund.com/startpages/selectstartpage.php?id=72

Engine^Medlem sedan dec. 20003 887 inlägg
#3

För att komma undan problemet med att inte flytta på den översta och den nedersta, så är det ju bara att välja ut

SELECT TOP 1 displayorder FROM pers_categories ORDER BY displayorder DESC

SELECT TOP 1 displayorder FROM pers_categories ORDER BY displayorder

Så har jag löst min flyttauppochnerfunktion. Sedan väljer jag ut det ID som ska flyttas och sparar det i en variabel.
Sedan tar jag DELETE på den posten som har det IDnumret, gör en UPDATE på det IDnummer som ligger före eller efter, beroende på om det ska flyttas upp eller ner, och ökar eller minskar det värdet med ett. Sista steget är att göra en INSERT för att igen lagra den variabel jag plockade ut från början med den skillnad att dess ordningsvärde då är ökat eller minskat med ett.

Den metoden är kanske inte den bästa, men den gör inte fel ivarjefall :)

126 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)