hjælp til menu links system

Tags:    php

jeg kunne godt taænke mig et system hvor jeg kan tilføje links til min menu...
man skal selv kunne.

vælge hvilken rækkefølge linksne skal være i
redigere link
redigere linkets rækkefølge

det skal være noget lign det her hvis i forstår

Fold kodeboks ind/udKode 


jeg har et billed af det her
http://4boys.4b.funpic.org/link.JPG (kopir linket op i adr linjen)

jeg har lavet en sql som ser sådan her ud

Fold kodeboks ind/udKode 


jeg kan god finde ud af at hente linksne fra databsaen for det er vel bare: Select * from menu_links order by link_order

men det med at gøre så linksne rækkefølge ændres når jeg tilføjer nye link med link_order som er optaget
osv kan jeg ikke




ville gerne give flere points men har desværre ikke flere

jeg vil meget gerne hvade forklaringer og kode eksempler
som hjælp

på forhånd tak




9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
inden din "insert into link() values()" hvor du skyder dit nye link ind, fyrer du en update af som rykker alle link med højere link_order en enkelt plads frem så der er plads til dit ny link ... "update link set link_order = link_order + 1 where link_order > $nye_links_link_order" ... er der ingen højere sker der intet, er der en eller flere bliver de flyttet en plads op.



Ved sidste års julekonkurrence var der konkurrencen hvor man skulle lave en ønskeddel som bl.a. gjorde det muligt at prioritere mellem de forskellige ønsker.
Så det jeg gjorde var: (Ca. sådan som Jonatan Hertel beskriver)

Fold kodeboks ind/udKode 


Der er måske ikke så meget stil over det, men jeg håber da at du kan se hvad jeg mener. Koden er fra "update", så den skal lige modificeret lidt (i hvert fald til "skriv ny").



Simon ... det er en sikkert velfungerende metode du angiver, men den bliver blot mere og mere langsom med tiden som data vokser.

Og så er den noget sværere at implementere end mit forslag.

Mit forslag indebærer at du ikke behøver kikke på data der findes i forvejen, du behøver ikke loade alle data, du behøver ikke loope igennem og opdatere alle data med en sql sætning for hver eneste ... alt hvad du gør er at sende en simpel update inden du inserter.

Nemt, hurtigt, optimalt.


Og nå ja, så var der en fejl i min sql ... den skulle være sådan her "update link set link_order = link_order + 1 where link_order + 1 > $nye_links_link_order" istedet for "update link set link_order = link_order + 1 where link_order > $nye_links_link_order"

[Redigeret d. 03/09-05 13:56:53 af Jonatan Hertel]



Jeg var ikke lige klar over at man kunne udføre en SQL syntax på den måde, og jeg misforstod den første gang jeg læste den.

Så nu kan jeg da godt se at den metode jeg angav er komplet idiotisk og usmart. Jeg undskylder for vildledning.



Jeg vil nu ikke gå så langt som til at kalde din metode for komplet idiotisk og usmart, Simon.
Du klarede opgaven i fin stil, og der skal sikkert ikke arbejdes med mange data, så forskellen bliver nok aldrig voldsom stor.

Den var bare ikke optimalt, fordi du løste noget data behandling som du ikke skulle bruge resultatet af i første omgang i php, istedet for i sql serveren.
Data behandling er sql serveren rigtig rigtig god til, plus din php løsning hentede alle data og sendte sql til serveren for hver række som skulle opdateres.
Det giver en del netværk og database overhead, selv hvis det er samme maskine som kører både php og databasen.

Så lad os hellere kalde det for en mindre optimal metode i lige denne situation.
I andre sammenhænge vil metoden helt sikkert give mere mening, f.eks hvis man i samme php script skulle bruge de data fra db'en eller noget ... hvad ved jeg :)



det fandt jeg så ud af men hvordan går jeg så jeg kan redigere et link


min kode
Fold kodeboks ind/udKode 


[Redigeret d. 04/09-05 16:36:46 af mitho]

[Redigeret d. 04/09-05 16:50:42 af mitho]



Jeg synes stadig det er tåbeligt, og min selvtillid som php-koder er helt i bund.
Nå... whatever. Jeg har da lært noget nyt :)



fandt ud det sidste selv



udeler points



t