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