02. februar 2006 - 12:02Der er
11 kommentarer og 1 løsning
Hvordan kombinerer man disse to sql-sætninger?
Howdy.
Jeg har noget asp-kode som via sql spytter en liste ud over brugere i min db. Hver bruger skal dernæst tjekkes for om han/hun har præcis 12 poster i en anden table. Mit problem er at jeg i øjeblikket bliver nødt til at anvende 2 sql-sætninger for at generere listen, hvilket giver et voldsomt performance-tab.
Her er de sql-sætninger jeg bruger:
Sætning_1: SELECT users.ID, users.navn, users.alder, users.amt FROM users ORDER BY users.ID DESC
Sætning_2: SELECT COUNT(*) AS supertotal FROM works, votes WHERE votes.vote_id = 11 AND votes.titel_id = works.ID AND works.kategori = 1
Sætning_1 bruger jeg til at hente listen over brugere og Sætning_2 kører jeg (via asp) for hver enkelt bruger i min db. Problemet er at Sætning_2 tager ca. 0.2 sekunder at udføre og da jeg tit skal liste op mod 100+ brugere, så er min loadetid oppe omkring 30-40 sekunder.
Mit spørgsmål er derfor om det er muligt at kombinere de 2 sql-sætninger på en smart måde? Er der nogle andre ting jeg kan gøre for at øge hastigheden i Sætning_2?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
SELECT users.ID, users.navn, users.alder, users.amt FROM users, works, votes WHERE votes.vote_id ? 11 AND votes.titel_id = works.ID AND works.kategori = 1 AND works.user_id = user.ID GROUP BY users.ID, users.navn, users.alder, users.amt HAVING COUNT(works.ID = 12)
Denne query skulle gerne finde alle users, som har 12 poster i works joinet med votes. Fidusen er at bruge HAVING sammen med GROUP BY.
En lille rettelse. Der kom et "?" tegn ind midt i det hele. Dette skal selvfølgelig være et "=" tegn.
SELECT users.ID, users.navn, users.alder, users.amt FROM users, works, votes WHERE votes.vote_id = 11 AND votes.titel_id = works.ID AND works.kategori = 1 AND works.user_id = user.ID GROUP BY users.ID, users.navn, users.alder, users.amt HAVING COUNT(works.ID = 12)
1. Jeg får en fejl i den sidste linje "HAVING COUNT(works.ID = 12)". 2. Jeg undrer mig lidt over linjen "AND works.user_id = user.ID". Er det meningen at den skal være med ? (jeg har hverken et works.user_id eller et user.ID - jeg har dog et users.ID...?)
Det er ikke sikkert at den query jeg skrev er helt rigtig, jeg kender jo ikke dine tabeller. Grunden til at jeg skrev AND works.user_id = user.ID, er for at joine works tabellen og user tabellen. Hvis denne join ikke er korrekt, skal dette selvfølgelig rettes.
ja, ok - nu har jeg tilrettet sætningen til det her:
SELECT users.ID, users.navn, users.alder, users.amt FROM users, works, votes WHERE votes.titel_id = works.ID AND works.kategori = 1 AND votes.vote_id = users.ID GROUP BY users.ID, users.navn, users.alder, users.amt HAVING COUNT(works.ID = 12)
Nu er det eneste problem fejlmeldingen i sidste linje. Fejlmeddelelsen fra SQL Manager er "Line 7: Incorrect syntax near '='."
ja, det var lidt svært at forklare overfor DR at en liste over kun 100 brugere fik brugeren til at tro at hans computer var gået ned ;-)
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.