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!
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.
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?
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
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.