webForumDet fria alternativet

Få poster i exakt vald ordning?

Databaser & SQL

6 svar · 488 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

Hallå!

Vad är det bästa sättet att få ett obestämt antal poster att hämtas i exakt vald ordning?
Sätter man ett fält där det fylls i en siffra och högst eller lägst hamnar först/sist?

Hur gör man i så fall om posten med ordningsnumret 78000 plötsligt ska vara post nr. 3? Ska alla däremellan få nya nummer då?

UPPDATERA post 78000 SÄTT 3
UPPDATERA post (> 2 AND < 78000) SÄTT +1

? ;)

Jag tror att jag vet hur man gör det, men det känns inte som en bra lösning.
Ska det blandas in en relationstabell på nåt vänster? Det blir ju lite samma sak där känns det som. Frågan är när man ska ha 78000 poster med bestämd ordning, men bara att uppdatera 50 poster för att en enda byter plats verkar omständligt.

Jag använder för övrigt php och mysql, men tänkesättet är väl detsamma oavsett.

Medlem sedan dec. 20025 483 inlägg
#2

Det bästa sättet är att sortera på ett fält som gör att ordningen blir som man vill ;) Vill man ha något i datumordning, ja då sorterar man på datumet. Frågan är hur din tabell ser ut och vad det är i den som bestämmer i vilken ordning raderna skall sorteras? Kan du ge något exempel?

Medlem sedan nov. 20016 480 inlägg
#3

Peter S skrev:

Det bästa sättet är att sortera på ett fält som gör att ordningen blir som man vill ;) Vill man ha något i datumordning, ja då sorterar man på datumet. Frågan är hur din tabell ser ut och vad det är i den som bestämmer i vilken ordning raderna skall sorteras? Kan du ge något exempel?

Hehe, jag har faktiskt inget bra exempel. Men i ett system där man kan hantera kategorier och underkategorier så kanske man vill ha dem i en bestämd ordning där det kan expandera och ändras om lite hur man vill med ordningen. Det rör sig ju iofs inte om något enormt antal poster i det exemplet, men det får duga.

Är det som jag beskrev i förra inlägget som man ska göra?

Medlem sedan dec. 20025 483 inlägg
#4

Ja, det låter rimligt. Om posten 78000 plötsligt ges 3, så bör ju den tidigare med nummer 3 få ett annat nummer.

Hur anger du vilken ordning kategorierna skall hamna? Har du en meny där du drar och släpper dem på korrekt plats, eller kanske en listbox där du med pilar kan flytta poster upp och ned? I sådana fall sparar du väl om listan när ändringarna gjorts, d.v.s. tömmer tabellen och sparar om listan?

Medlem sedan nov. 20016 480 inlägg
#5

Jag har ingenting, jag bara spekulerar :)

Men jag bör ha en relationstabell med ordningen som hela tiden töms och sparas om?
Låt säga att jag nu hade 78000 poster. Om det ska tömmas och sparas om hela tiden, är inte det ganska krävande? Vad händer om tömningen görs och sedan avbryts det nya mitt i? Sånt kan väl inträffa?

Medlem sedan dec. 20025 483 inlägg
#6

Om det sker "hela tiden" blir det tungt för vilken server som helst ;)

Skulle ett fel inträffa mitt i tömningen återkallas alla ändringar beroende på om autocommit är påslaget eller inte. Autocommit finns inte i MyISAM, så det är viktigt vilken lagringsmotor som används. (Lite om autocommit: http://dev.mysql.com/doc/refman/5.0/en/innodb-and-autocommit.html.)

Du skulle kunna ha en tabell som refererar huvudtabellen. Den tabellen kan ha två fält: post-id och ordning.

Medlem sedan feb. 20034 441 inlägg
#7

Jag kör med drag n' drop när jag ska göra något liknande, enl:
http://www.dhtmlgoodies.com/scripts/arrange-nodes-2/arrange-nodes-2.html

Men det går ju såklart inte om du har 78.000 poster.

252 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)