Orderen van mysql tabel.
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 :)
FROM tabel
ORDER BY (id = 1 ) DESC
, (id=5) DESC
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?
Gewijzigd op 11/01/2014 16:47:39 door stefano test
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?
Maar goed:
Ordenen op id van laag naar hoog:
Ordenen op id van hoog naar laag:
Laat de eerste 10 resultaten zien (regel 1 t/m 10):
Laat de tweede 10 resultaten zien (regel 11 t/m 20):
gecombineerd:
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.
Stel item met id 100 moet van positie 5 naar 2:
Ik doe het niet via mysql. Dus ik moet php5 3 draaien, anders pech?
? is dit wel het goede topic, Roel?