Avatar billede madsens90 Praktikant
23. marts 2010 - 10:05 Der er 12 kommentarer og
1 løsning

PHP musik playlist i MySQL. Ændre plads på sang på nemmeste måde?

Hej Eksperter!!

Jeg har et lille "tænke problem" i måske kan hjælpe mig med.

Jeg er er ved at lave en playlist for en kammerat til noget musik på hans hjemmeside, og sangene har et sangnummer hvori der står hvilket nummer på playlisten de er.

Problemet er så:

Vil lave så man kan ændre en sangs plads på playlisten.
Så sang 10 bliver sange 9 i stedet ved at trykke på "pil op", og knappen i sig selv kan jeg sagtens lave. Men hvordan gemmer jeg smartest muligt hvor sangene skal ligge, uden at skulle opdaterer næsten alle sangene på playlisten.
Hvis jeg f.eks ændre sang 7, til sang 6, så er jeg nødt til at ændre plads på sang 6, 7, 8 , 9 og 10 (hvis der er 10 sange på listen).
Vil gerne slippe for dette, så man kun skal ændre pladsen på sang 7, og måske sang 6?

Håber i kan hjælpe!!

- Christian
Avatar billede majbom Novice
23. marts 2010 - 10:14 #1
hvis du rykker en sang op, skal den opdatere sangen som den bytter plads med, så den får en ny placering der svarer til nuværende placering plus 1.
Avatar billede majbom Novice
23. marts 2010 - 10:15 #2
det var nok lidt dårligt forklaret, men jeg prøver igen

hvis du flytter en sang OP, skal du trække 1 fra placeringen på sangen du flytter, og ligge 1 til placeringen på den sang der ligger FØR.


hvis du flytter en sang NED, skal du ligge 1 til placeringen på sangen du flytter, og trække 1 fra placeringen på den sang der ligger EFTER.
Avatar billede madsens90 Praktikant
23. marts 2010 - 10:16 #3
Aaaah. Det er selvfølgelig rigtigt når man gør det sådan.

Det jeg også mente med det var hvis man flyttede en sang mere end en plads.
Hvis man f.eks har 1000 sange, og flytter sang 1000 til plads 1..
Så er man nødt til at opdaterer alle 1000 sange?
Avatar billede majbom Novice
23. marts 2010 - 10:23 #4
noget a la:

UPDATE songs SET position=position+1 WHERE position > $ny_position_på_flyttet_sang

måske
Avatar billede madsens90 Praktikant
23. marts 2010 - 10:26 #5
Jah, men den ville så ændre i alle 1000 sange ikke?
Jeg tænkte om det var en måde at slippe for det på?
Tænkte mere på hastigheden af serveren, hvis der er mange mennesker der bruger hver sin playlist, og alle har 1000 sange de flytter rundt på. ;)
Avatar billede madsens90 Praktikant
23. marts 2010 - 10:45 #6
Min lærer er lige kommet med en okay løsning.

Jeg har auto increment på et id som er på alle sangene på playlisten.
Så har jeg sang navnet på sangen.
Destinationen på sangen
Og som det sidste felt har jeg ID'et på den NÆSTE sang på listen.

På den måde skal jeg kun opdaterer 3 felter når jeg flytter en sang.

Hvis jeg flytter sang på plads 7 til plads 3, skal jeg opdaterer sang 7 til at pege på sang 4. sang 6 til at pege på sang 8, og sang 2 til at pege på sang 7.
Når jeg siger "pege på", mener jeg ID'et, som jo er forskelligt på alle sange.
Så er det problem løst. ;)

Men hvordan laver jeg en SELECT som tager sangene ud i den rækkefølge som det sidste felt angiver? ;)

Håber du/i forstår!
Avatar billede majbom Novice
23. marts 2010 - 11:06 #7
Hvis jeg flytter sang på plads 7 til plads 3, skal jeg opdaterer sang 7 til at pege på sang 4. sang 6 til at pege på sang 8, og sang 2 til at pege på sang 7.
Når jeg siger "pege på", mener jeg ID'et, som jo er forskelligt på alle sange.

det fatter jeg ikke noget af...

alle sange mellem 3 og 7 skal opdateres, da de alle får nye pladser
Avatar billede madsens90 Praktikant
23. marts 2010 - 11:51 #8
Forestil dig at der er 10 sange og det ser sådan ud:

ID -  Navn - Næste nr
1  - sang1 -    2
2  - sang2 -    3
3  - sang3 -    4
4  - sang4 -    5
5  - sang5 -    6
6  - sang6 -    7
7  - sang7 -    8
8  - sang8 -    9
9  - sang9 -    10
10 - sang10-    0


Så flytter jeg sang 7 til plads 3 så det nu ser sådan ud (usorteret):

ID -  Navn - Næste nr
1  - sang1 -    2
2  - sang2 -    7
3  - sang3 -    4
4  - sang4 -    5
5  - sang5 -    6
6  - sang6 -    8
7  - sang7 -    3
8  - sang8 -    9
9  - sang9 -    10
10 - sang10-    0

Sorteret:

ID -  Navn - Næste nr
1  - sang1 -    2
2  - sang2 -    7
7  - sang7 -    3
3  - sang3 -    4
4  - sang4 -    5
5  - sang5 -    6
6  - sang6 -    8
8  - sang8 -    9
9  - sang9 -    10
10 - sang10-    0


Håber du forstå hvad jeg mener. :) Der er man kun nød til at ændre på 3 ID'er. :)

Problemet er bare at man ikke kan lave en SELECT fra PHP.
1. fordi at man ikke ved hvilken sang der er nr 1 på playlisten.
2. fordi man ikke kan sorterer sangene.
Avatar billede majbom Novice
23. marts 2010 - 11:59 #9
ja okay, det kunne man selvfølgelig også, men så tror jeg nu jeg vil foretrække min metode, så kommer du ud over dine 2 problemer :)
Avatar billede madsens90 Praktikant
23. marts 2010 - 12:01 #10
Men det er mere hvis man har 1000 sange på playlisten. Så skal den opdaterer alle 1000 sange jo?
Avatar billede majbom Novice
23. marts 2010 - 12:49 #11
det var da osse en lang playlist :)

du kan jo prøve at se hvor lang tid det tager at køre sådan en query
Avatar billede madsens90 Praktikant
23. marts 2010 - 13:28 #12
Ved jeg ikke lige hvordan jeg skulle gøre.
Men håbede bare på en smartere metode at gøre det på, men er vidst kommet frem til at det er der ikke. ;P

Så kom med et svar, og så benytter jeg bare den simple metode. :)
Avatar billede majbom Novice
23. marts 2010 - 13:37 #13
bare i orden :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester