|
| [MYSQL] bytte rundt på data Fra : Leonard |
Dato : 10-12-05 22:08 |
|
Jeg har en tabel i MySQL med felterne:
id, tekst, x
id er primær key og autoincrementes ved input.
x fortæller rækkefølgen af data, når jeg henter det ud med:
SELECT tekst FROM tabel ORDER BY x ASC
2, tekst2, 1
3, tekst3, 2
1, tekst1, 3
4, tekst4, 4
5, tekst5, 5
Hvad er den smarte metode til at flytte rundt på x?
Hvis jeg har id og ny_x: id=4 og ny_x=2
Så skal x i id 3 og 1 tælles en op, så x i id 4 kan blive nr 2
Kan det gøres nemt i MySQL eller skal der noget PHP til?
--
med venlig hilsen
Leonard - http://leonard.dk/
| |
Michael Zedeler (11-12-2005)
| Kommentar Fra : Michael Zedeler |
Dato : 11-12-05 02:05 |
|
Leonard wrote:
> Jeg har en tabel i MySQL med felterne:
>
> id, tekst, x
>
> id er primær key og autoincrementes ved input.
>
> x fortæller rækkefølgen af data, når jeg henter det ud med:
>
> SELECT tekst FROM tabel ORDER BY x ASC
>
> 2, tekst2, 1
> 3, tekst3, 2
> 1, tekst1, 3
> 4, tekst4, 4
> 5, tekst5, 5
>
> Hvad er den smarte metode til at flytte rundt på x?
Det kan gøres i MySQL. Noget i stil med
UPDATE tabel SET x=IF(id=4, 2, IF(x=2, 4, x))
WHERE id=4 OR x=2
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf
| |
Michael Zedeler (11-12-2005)
| Kommentar Fra : Michael Zedeler |
Dato : 11-12-05 13:50 |
|
Michael Zedeler wrote:
> Leonard wrote:
>
>> Hvad er den smarte metode til at flytte rundt på x?
>
> Det kan gøres i MySQL. Noget i stil med
>
> UPDATE tabel SET x=IF(id=4, 2, IF(x=2, 4, x))
> WHERE id=4 OR x=2
Eller måske bare
UPDATE tabel SET x=IF(id=4, 2, 4)
WHERE id=4 OR x=2
Det smarte er, at du slet ikke behøver at vide noget om den anden række,
du bytter plads med, andet end dens position (værdien af x). Men husk at
det forudsætter at feltet x ikke indeholder dubletter. Ellers går det galt.
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf
| |
Leonard (11-12-2005)
| Kommentar Fra : Leonard |
Dato : 11-12-05 18:06 |
|
Michael Zedeler <michael@zedeler.dk> wrote:
>Det smarte er, at du slet ikke behøver at vide noget om den anden række,
>du bytter plads med, andet end dens position (værdien af x). Men husk at
>det forudsætter at feltet x ikke indeholder dubletter. Ellers går det galt.
Og som jeg læser dine forslag, så skal jeg skrive en helt ny, hvis jeg
vil flytte nr. 3 hen til nr. 5.
Jeg fandt på at give x numrene 2,4,6 ... også lave så den select der
vælger det nye nummer, vælger mellem de ulige 1,3,5,7 ...
Så giver jeg først den valgte id det nye ulige nummer, og så løber jeg
lige striben igennem sorteret efter x og tildeler dem alle nye lige
numre.
Det virker fint og jeg forstår hvad der sker, men det blev så en
løsning i PHP
--
med venlig hilsen
Leonard - http://leonard.dk/
| |
Michael Zedeler (11-12-2005)
| Kommentar Fra : Michael Zedeler |
Dato : 11-12-05 20:54 |
|
Leonard wrote:
> Michael Zedeler <michael@zedeler.dk> wrote:
>
>
>>Det smarte er, at du slet ikke behøver at vide noget om den anden række,
>>du bytter plads med, andet end dens position (værdien af x). Men husk at
>>det forudsætter at feltet x ikke indeholder dubletter. Ellers går det galt.
>
>
> Og som jeg læser dine forslag, så skal jeg skrive en helt ny, hvis jeg
> vil flytte nr. 3 hen til nr. 5.
Nej. Du skal sætte variablene ind fra PHP.
> Jeg fandt på at give x numrene 2,4,6 ... også lave så den select der
> vælger det nye nummer, vælger mellem de ulige 1,3,5,7 ...
>
> Så giver jeg først den valgte id det nye ulige nummer, og så løber jeg
> lige striben igennem sorteret efter x og tildeler dem alle nye lige
> numre.
> Det virker fint og jeg forstår hvad der sker, men det blev så en
> løsning i PHP
Som sandsynligvis er langsommere.
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf
| |
|
|