Hallo,

Ik had een klein waarschijnlijk simpel vraagje

Ik heb een tabel in mijn database. Met 10 rows.

Dus ongeveer zo:

1: Test
2: Test2
3: Test3
4: Test4
5: Test5

Etc. Hij baseert nu de volgorde via ID. Hoe kan ik doormiddel van een query test5 op plek 2 krijgen dus eigenlijk nummer 5 word 2 en nummer 2 word 3.

Misschien wat onduidelijk. Alvast bedankt :)
SELECT *
FROM tabel
ORDER BY (id = 1 ) DESC
, (id=5) DESC
Oke. Maar ik maak zeg maar een adminpaneltje waar mensen de volgorde kunnen veranderen. Hoe zou ik een update query kunnen doen? Zeg maar

UPDATE TABEL SET id='$id' WHERE id//Dit is nummer 5 die naar nummer 2 gaat waar $id nummero2 selecteert ofzo
UPDATE TABEL SET id='$id' + 1 WHERE id//Dit is nummer 2 die naar 3 gaat

Wat alleen niet werkt is dan zeg maar nummer 3 naar 4 en nummer 4 naar 5.

Of je moet dan met een for/while loop alle ids langsgaan en bij allemaal +1 doen. maar dat lijkt me een slecht idee toch?

een volgorde-kolom toevoegen, is mi het beste.

van de id kolom blijf je af: dat is een unieke aanduiding en die blijft altijd gelijk.

met de volgorde kolom kun je dat zelf de sortering bepalen.
Het eenvoudigste is het als je een item met een ander kunt verwisselen.
Maar "nummer 5 gaat naar nummer 2" is iets moeilijker, maar nog wel te doen.

Eenvoudigste is "één omhoog" of "één omlaag"

Hoe doe ik dat een omhoog een omlaag?
stefano misschien moet je eens wat over SQL gaan lezen.

Maar goed:

Ordenen op id van laag naar hoog:

SELECT * FROM tabel ORDER BY id ASC


Ordenen op id van hoog naar laag:

SELECT * FROM tabel ORDER BY id DESC


Laat de eerste 10 resultaten zien (regel 1 t/m 10):

SELECT * FROM tabel LIMIT 0,10


Laat de tweede 10 resultaten zien (regel 11 t/m 20):

SELECT * FROM tabel LIMIT 10,10


gecombineerd:

SELECT * FROM tabel ORDER BY id DESC LIMIT 0,10

stel je wilt het record met volgordenr 4 omhoog naar 3 hebben.
dan moet 3 dus de waarde 4 krijgen.

Je klikt op het item met id = x.
Stap 1 achterhaal het volgordenr

SELECT volgordenr FROM tabel WHERE id = x; # x is een getal!
-- we vinden 4

dan achterhalen we met welke id hij moet wisselen. (we vonden 4, maar stel dat 3 is verwijderd dan zouden we met volgordenr 2 moeten wisselen.

SELECT volgordenr, id FROM tabel
WHERE volgordenr < 4
ORDER BY volgordenr DESC
LIMIT 1

we vinden 3 voor het volgordenr en zeg 100 voor het id

Nu de aanpassing

START TRANSACTION;
UPDATE tabel
SET volgordenr = 4
WHERE id = 100;

UPDATE tabel
SET volgordenr = 3
WHERE id = x;
COMMIT;

En ja, dat kan ook in minder query's maar ik denk dat het zo het overzichtelijkste is.
Meerdere posities opschuiven is niet veel anders, het enige wat je moet weten is het id, de oude positie en de nieuwe positie van het te verschuiven item.
Stel item met id 100 moet van positie 5 naar 2:

UPDATE tabel SET volgordenr = IF(id=100, 2, volgordenr+1)
WHERE volgordenr BETWEEN 2 AND 5
Ik doe het niet via mysql. Dus ik moet php5 3 draaien, anders pech?
? is dit wel het goede topic, Roel?

Reageren