Kom ihåg mig?
Home Menu

Menu


Prio i SQL databas.

Ämnesverktyg Visningsalternativ
Oläst 2009-01-23, 22:58 #1
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Hej.
Sitter och gör ett eget cms-system i ASP mot en mySQL databas.
Jag har fastnat lite på en punk. Prioritering av inlägg..
Finns det någon som har något bra tips på hur ett system för att prioritera inläggen?
Just nu så sorteras alla inlägg efter datumet det är skapat. Hade varit nice om man kunde göra ett inlägg som alltid ligger först.
Först tänkte jag göra nått ful-hack och mata vaje post i databasen med ett "prio" nummer som skulle vara typ 1000. Och sedan om man vill ha en högre prio på ett annat meddelande så får det nummer 999 och så vidare. Men det strular till sig när man ska börja hålla koll på vilka prio-nummer som är använda.
Så om någon har gjort något liknande vore jag glad om ni skulle dela med er av era kunskaper.
Zajber är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-23, 23:42 #2
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Om du har över 1000 prioriterade inlägg trorjag du har ett problem med att få en bra översikt i alla fall...
Jag tror det räcker med en bool/bit. Alla prioriterade inläggbörju kunna komma i datumordning de också... Så istället för
Kod:
... ORDER BY created DESC
borde du kunna göra
Kod:
... ORDER BY prio DESC, created DESC
givet då att prio = 1 för prioriterade inlägg och nollför resten.

Jag tvivlar på att du behöver vara finurligare än så.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 01:45 #3
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Hmm. så långt har jag också fattat.
Men jag kommer att behöva prioritera fler inlägg separat. Så att datumet inte spelar någon roll alls.
När systemet är klart så måste man kunna prioriter minst 1000 inlägg.

Sen kan det ju vara bra att lära sig någon teknik för detta, jag har stött på det här problemet nån gång förut och inte hittat någon vettig lösning.

Det skulle ju kunna gå att ladda en annan databas med alla nummer. Men som sagt. det är inte så lätt..
Zajber är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 03:46 #4
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Vadmenar du med Prioritet, kan du förklara ytterligare?

Du kan ju exempelvis sortera på flera kolumner så om du har exempelvis 5 olika prioriteter och du inom varje prioritet vill kunna sortera på exempelvis datum så kan du göra så här (som även eg0master förslog):

Kod:
... ORDER BY prio DESC, created ASC
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 10:32 #5
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Jag vill alltså kunna skapa en kolumn för att sortera inläggen helt enkelt.
Om jag har en lista på säj 30 inlägg ska jag kunna flytta inlägg upp och ner på listan så att dom visas i ordningen jag väljer istället för att sorteras efter datum.

Hmm.. typ som i IIS-inställningarna när man kan välja prioritet på default-sidorna. Man flyttar olika namn upp och ner i listan för att dom ska öppnas i ordning.
Zajber är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 11:15 #6
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Lindahl Lindahl är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 854
Ska du kunna detaljstyra det så måste du ju ha en kolumn med ett sorteringsvärde, finns liksom inget annat sätt. Dock är det ju hyfsat enkelt att ordna om rangordningen. Vill du ha in nåt nytt på plats 30 kan du ju bara köra UPDATE tbl SET prio=prio+1 WHERE prio>30...
Lindahl är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 11:28 #7
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Det finns en variant till, som dock inte är så rolig att skriva sql-frågor för: länkad lista
Onkelborg är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-24, 11:38 #8
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Zajber Zajber är inte uppkopplad
Nykomling
 
Reg.datum: Jan 2009
Inlägg: 9
Citat:
Ska du kunna detaljstyra det så måste du ju ha en kolumn med ett sorteringsvärde, finns liksom inget annat sätt. Dock är det ju hyfsat enkelt att ordna om rangordningen. Vill du ha in nåt nytt på plats 30 kan du ju bara köra UPDATE tbl SET prio=prio+1 WHERE prio>30...
Ja! Det är ju precis så jag vill göra! Tack så mycket... Så enkelt.
Zajber är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-25, 00:07 #9
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Du behöver dela in en förflyttning i flera mindre steg:

låt oss ta ett exempel:

Du har en lista med:

Prio, Namn
1, Kalle
2, Olle
3, Greta
4, Lena
5, Hanna
6, Torkel

Om du nu vill flytta raden 5, Hanna till position 2 och flytat ned alla som idag har 2 ett steg så kan du göra så här:

Steg 1:
Ta posten 5, Hanna och ändra prio till 999, Hanna

Prio, Namn
1, Kalle
2, Olle
3, Greta
4, Lena
6, Torkel
999, Hanna




Steg 2:
Öka värdet på alla pri som är i intervalet 2-4 med 1

Prio, Namn
1, Kalle
3, Olle
4, Greta
5, Lena
6, Torkel
999, Hanna


Steg 3:
Ändra prio 999 till 2

Prio, Namn
1, Kalle
2, Hanna
3, Olle
4, Greta
5, Lena
6, Torkel


Klart!


I SQL skulle du mao behöva göra 3 olika update-satser:

Kod:
UPDATE tbl SET prio=999 WHERE prio=5;
UPDATE tbl SET prio=prio+1 WHERE prio>=2 AND prio<5;
UPDATE tbl SET prio=2 WHERE prio=999;
En datalj i sammanhanget kanske men du kan ju välja att ha en mellanlagringsstatus på 0 i stället för 999 om det blir enklare.
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 11:27.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017