14. juni 2006 - 12:53Der er
9 kommentarer og 1 løsning
En lidt kryptisk sql sætning ?
Hejsa,
Jeg sidder og skal have lavet en sql forespørgelse der for mig er noget kryptisk.
Jeg har et image map med x antal felter som hver især holder på et koordinat sæt 0;0 0;1 0;2 osv.
Det skal er at når en bruger klikker på et givent felt i dette image map så skal jeg finde top 5 records fra databasen der ligger tættest på det felt der er klikket på.
Altså hvis der er klikket på felt med koordinat 12;32 skal forespørgelsen kunne finde frem til hvilke 5 koordina sæt i databasen der ligger tættest på.
tabellen i databasen indeholder 2 felter et til x-koordinat og et til y-koordinat.
Du kan jo starte med at lave et udtræk over koordinater der ligger indefor et bestemt interval, eks. +/- 3 dvs. x mellem 9 og 15 og y mellem 29 og 35 eller noget i den stil. Så kan du jo beregne afstanden matematisk for de tilbageværende felter. Noget a la: select top 5 x,y, sqr(x*x+y*y) from tabel where x between m-3 and m+3 and y between n-3 and n+3 order by sqr(x*x+y*y)
Jeg kan bare ikke lave det med en bestemt antal da jeg ikke ved om der er f.eks 10, 25 el. 49 imellem de 5 der ligger tættest på det sted der bliver klikket, nogen foreslag til det ?
hvis du vil have dem der ligger nærmest må du beregne for dem alle. Eks. vil 12.36 ligge tættere på end 9.29 og den er endda smidt væk med det indledende filter. det må være et spørgsmål om performance iht. korrekte svar. hvis data er statiske, kan du beregne top 5 for hvert felt om natten, og gemme disse informationer i en tilhørende tabel. så kan du med lethed slå de nærmeste 5 op.
ok SQRT virker, men så kommer der så et nyt spørgsmål.
Når en bruger har klikket i et felt får jeg et koordina sæt 2;2 f.eks. for at kunne bruge dette koordinat sæt skal jeg beregne afstanden i x og y i forhold til det koordinat sæt der er klikket på og de koordinat sæt der ligger for hver record i databasen.
Altså klikket på :
2;2
i databasen ligger der så :
0;0 0;1 0;2 osv.
her skal jeg så beregne afstanden i x og y retning inden el. i samme ombæring med at jeg tager kvardrat roden.
Det ser godt ud, men husk at du ved hjælp af et filter på x og y kan gøre beregningen noget hurtigere, men knap så præcis. Alternativt hvis data ikke ændrer sig så meget kan du lave genberegninger hvergang du indsætter et nyt koordinat.
teepee >> Jeg er med på at det vil blive hurtigere hvis jeg har filter på, men jeg kan bare ikke bruge det i dette tilfælde og umiddelbart ser det ud til ikke at være det store problem, men det må jeg holde lidt øje med og så benytte mig af filteret hvis det bliver for sløvt.
Tak for hjælpen ;o)
Synes godt om
Ny brugerNybegynder
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.