Hoogste waarde
Goedeavond,
Ten eerste wens ik alle mensen van PHP Hulp de beste wensen.
Ik begin het jaar gelijk met een vraagje. Ik probeer een soort takensysteem te maken. En deze kunnen een aparte volgorde krijgen. Echter moet zodra er een nieuwe taak wordt toegevoegd de laatste ORDER+1 ingevuld worden.
Heeft iemand enig idee hoe ik dit doe. Is hier een functie voor. Iets in de trend van:
SELECT highest(`order`) FROM tasks
Ten eerste wens ik alle mensen van PHP Hulp de beste wensen.
Ik begin het jaar gelijk met een vraagje. Ik probeer een soort takensysteem te maken. En deze kunnen een aparte volgorde krijgen. Echter moet zodra er een nieuwe taak wordt toegevoegd de laatste ORDER+1 ingevuld worden.
Heeft iemand enig idee hoe ik dit doe. Is hier een functie voor. Iets in de trend van:
SELECT highest(`order`) FROM tasks
Gesponsorde koppelingen:
SELECT MAX(order)
Het lijkt mij niet de juiste optie om gebruik te maken van MAX
Vertel eerst maar eens heel duidelijk wat "order" voorsteld en wat je er dan mee wilt gaan doen.
Een max trekken van iets en er dan iets bij optellen en dan gebruiken voor een PK en of UK is vragen om problemen. Je zult hiervoor een sequence meganisme moeten bouwen als je met mysql werkt althans. Andere database zijn daar al in voerzien.
Vertel eerst maar eens heel duidelijk wat "order" voorsteld en wat je er dan mee wilt gaan doen.
Een max trekken van iets en er dan iets bij optellen en dan gebruiken voor een PK en of UK is vragen om problemen. Je zult hiervoor een sequence meganisme moeten bouwen als je met mysql werkt althans. Andere database zijn daar al in voerzien.
Volgens mij zul je MAX() altijd in combinatie met GROUP BY moeten gebruiken, aangezien MAX() het maximum van een bepaalde groep bepaalt. Gangbaarder om de hoogste waarde in een kolom te bepalen is:
Ik wil dus kijken wat de laagste prioriteit heeft (dus hoogste order/volgorde nr) en hierbij 1 optellen en vervolgens samen met de rest van in informatie INSERT-en.
Quote:
Volgens mij zul je MAX() altijd in combinatie met GROUP BY moeten gebruiken.
ligt er maar net aan hoe de select-clause er verder uit ziet..
Als je het aantal record in een tabel wilt weten dan doe je toch ook:
select count(1) aantalrecords from tabel
maar als je bijvoorbeeld per iets iets wilt weten ja dan moet je een group by gebruiken:
select iets,count(1) aantaliets from tabel group by iets
Maar het komt hier op neer, elke oplossing die wat gaat doen met de waarde waar het om gaat + iets is per definitie incorrect / foutgevoelig
Gewijzigd op 03/01/2012 18:32:35 door Noppes Homeland
Wat je ook kan doen, maar wat dan wel beetje meer werk vergt is een array maken en dan met de sort() functie werken.
Ik zoek dus meer een soort functie die dus gwn SELECT max(volgorde/order) FROM tasks en dat die dus gwn $order = 5;
ofzo terug geeft. Wil dus zo min mogelijk rest code hebben.
Toevoeging op 03/01/2012 18:50:37:
Ik kan ook gewoon de huidige volgorde uit lezen en ze stuk voor stuk opslaan met opgehoogde volgordeNr en dan als laatste de nieuwe. Maar het moet veel makkelijker kunnen of ben ik nou dom aan het praten
ofzo terug geeft. Wil dus zo min mogelijk rest code hebben.
Toevoeging op 03/01/2012 18:50:37:
Ik kan ook gewoon de huidige volgorde uit lezen en ze stuk voor stuk opslaan met opgehoogde volgordeNr en dan als laatste de nieuwe. Maar het moet veel makkelijker kunnen of ben ik nou dom aan het praten
Verdiep je in hoe je op jouw database een sequence kan implementeren.
1 ding weet ik wel, dat je het voor mysql zelf in elkaar moet flansen, als je dat eenmaal hebt dan wil je ook geen auto_increment meer hebben.
1 ding weet ik wel, dat je het voor mysql zelf in elkaar moet flansen, als je dat eenmaal hebt dan wil je ook geen auto_increment meer hebben.
Jos Verra op 03/01/2012 18:45:53:
Wanneer 2 gebruikers dit tegelijkertijd doen heb je een conflict met dezelfde uitkomst. @Internet Verslaafde: Idem dito en processen in php arrays met nog veel meer risico is knoeiwerk. Nog meer kans op conflicterende dubbelingen.Ik zoek dus meer een soort functie die dus gwn SELECT max(volgorde/order) FROM tasks en dat die dus gwn $order = 5;
De beste manier is inderdaad een sequence bouwen in MySQL. In tegenstelling tot Oracle kent MySQL dit helaas niet default.



