Avatar billede mozart1973 Nybegynder
07. december 2012 - 12:42 Der er 7 kommentarer og
1 løsning

Holde tabel på 10 rækker

Jeg skal lave en highscore på 10. Jeg ønsker ikke at databaseb indeholder mere end de ti højeste score.
Så hver gang der tilskrives en score/række mere, skal der ryddes op, så der kun er ti rækker.

Men hvordan kan en sql se ud der finder de ti rækker med højeste score og sletter de resterende?

Kan det overhovedet gøres med en sql sætning?
07. december 2012 - 15:27 #1
Det var ikke det du spurgte om, men jeg kan ikke dy mig for at spørge hvorfor det er vigtigt at begrænse database tabellen til ti rækker.  Er det på grund af 'performance?'  Jeg vil ikke tro du kan mærke forskel på om tabellen har 10 rækker eller 1000 rækker.  Hvis du har mere end 10 rækker i tabellen får du de ti højeste rækker trukket ud ved en forespørgsel såsom SELECT * FROM myscores ORDER BY score DESC limit 10.

Men hvis du vil rydde op i tabellen myscores kan det gøres ved at selecte de ti højeste scores, flytte disse til en anden tabel, såsom myscores2, tømme myscores, flytte tilbage fra myscores2 til myscores, og tømme myscores2.  Såsom (ikke tested):

INSERT INTO myscores2 SELECT * FROM myscores ORDER BY score DESC limit 10æ
TRUNCATE myscores;
INSERT INTO myscores SELECT * FROM myscores2æ
TRUNCATE myscores2;
Avatar billede mozart1973 Nybegynder
07. december 2012 - 17:36 #2
Grunden er, at jeg ikke ønsker at tabellen vokser i det uendelige. Det er også unødvendigt at have mere end ti, når der kun skal vises ti.

Men din sql streng kan jeg jo prøve at bruge, og så kører den når tabellen er blevet en hvis størrelse. Det må jo kunne automatiseres på en eller anden måde.
Avatar billede arne_v Ekspert
07. december 2012 - 19:16 #3
Eller bare slet en raekke hver gang der indsaettes en raekker (efter at de 10 er naaet).
Avatar billede erikjacobsen Ekspert
07. december 2012 - 22:18 #4
Og en sidebemærkning: Hvis nummer 11 og nummer 10 har samme højeste score, skal nummer 11 så også væk? Eller nummer 10?
Avatar billede mozart1973 Nybegynder
08. december 2012 - 19:53 #5
Det er jo ikke bare at slette en række. Det skal være den med laveste score. Hvad nu hvis der bliver 12 rækker. Så er der jo to der skal slettes. Hvordan finder man dem?

erikjacobsen: Jeg vil nok vælge den der sidst tilføjede, tror jeg.
Avatar billede erikjacobsen Ekspert
08. december 2012 - 20:44 #6
Så husk at, der er to kriterier for at være på top10. Ellers "plejer man" at vise 11 rækker, hvis nummer 10 og 11 har samme antal point.
14. december 2012 - 16:28 #7
mozaer1973, hvad er din videre hensigt med dette spørgsmål?  Jeg foreslog en løsning som du sagde du ville prøve at bruge.  Hvordan faldt det ud?  Hvordan forholder du dig til de andre indlæg?  Kom ind og fortæl hvad der videre skal ske, eller luk spørgsmålet (efter at have inviteret de svar du har brug for, du har svar fra mig.)
Avatar billede mozart1973 Nybegynder
17. december 2012 - 01:02 #8
Nå, den slettede alt det jeg lige skrev. gider ikke skrive det igen.  Men dit er var bedste bud.
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
Computerworld tilbyder specialiserede kurser i database-management

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