Avatar billede jonas_h Nybegynder
28. januar 2005 - 20:18 Der er 4 kommentarer

Struktur så koden er "hurtig"

Jeg skal lave et site, hvor det forventes at der er mange brugere samtidigt.

Det skal indeholde statistikker osv, så ville høre om der er nogle "tips" til at lave strukturen på en speciel måde.

Havde tænkt mig noget i stil med følgende:
I databasen er en tabel med brugere, som hver har et id-nummer.
En tabel som indeholder statistik, og har bruger-id nummerte som "kendetegn" til brugeren.

Osv osv. Men så tænker jeg bare på, at når man skal vise statistik for brugere, bliver det hurtigt noget med, at den skal først hente fra én tabel, derefter et id-nummer fra en anden tabel og så vokser antallet af handlinger fra databasen jo hurtigt.

Vil jo gerne have hentet alle informationer til en variabel i ét kald, og derefter lukke databaseforbindelsen.

Det er lidt svært at forklare, men håber I forstår havd jeg mener :) Ellers spørg endelig!
Avatar billede driis Nybegynder
28. januar 2005 - 21:10 #1
Jeg er ikke helt sikker på hvilken datastruktur du vil have. Men hvis mængden af data er begrænset, er det helt sikkert muligt at designe databasen så du kan hente al nødvendig information for én side ud med én SQL command, f.eks. med join. Hvis du _skal_ bruge flere SQL opslag på én gang kan du bruge en stored procedure til at optimere med.

Husk, der er intet i vejen med at returnere flere recordsets i ét kald til databasen.

Hvis det er store datamængder kan du bruge lidt tid på at finde fornuftige indexes og prøve hvor meget performance du vinder ved det - hvis din database understøtter det.
Avatar billede jonas_h Nybegynder
29. januar 2005 - 00:32 #2
Hmm et eksempel kunne være:
SQL = "SELECT userId, point FROM point ORDER BY point"
Set rs = conn.Execute(sql)
Do Until rs.EOF
sql = "SELECT navn FROM users WHERE id = " & userId
set rsUser = conn.Execute(sql)
Response.Write rs("point") & " " & rsUser("navn")
rsUser.Close
set rsUser = Nothing
Loop
luk rs...

Findes der en måde, så man i et sql kald, kan hente det HELE ned i en variabel? Også brugernavnet?
Avatar billede jonas_h Nybegynder
29. januar 2005 - 00:33 #3
og har lige glemt lidt movenext osv i koden.... men du kan vel se meningen
Avatar billede softspot Forsker
29. januar 2005 - 02:19 #4
Det lyder som om du kan bruge en JOIN til at samle data op på een gang. Det kunne være noget i stil med dette (til Access):

SELECT p.userId, p.point, u.navn
FROM point AS p INNER JOIN user AS u ON p.userId = u.Id
ORDER BY p.point

...og så kan du gennemløbe resultatet som du selv forslog, dog uden alle de "dyre" opslag til databasen for hver point. Noget i stil med (sql er sat til ovenstående SELECT):

Set rs = conn.Execute(sql)
Do Until rs.EOF
  Response.Write rs("point") & " " & rsUser("navn")
  rs.MoveNext
Loop
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
Kurser inden for grundlæggende programmering

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