Problemstillingen er sådan set simpel; Jeg skal have tilføjet tabellen "brugerbesoegtab" til nedenstående SQL, således, at brugerne kan sorteres efter antallet af deres forekomster i kolonnen "VaertID". Altså hvor mange gange deres unikke brugerID i tabellen "profiltab" befinder sig i kolonnen "VaertID". Nogen der er i stand til at hjælpe med det?
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.
Men denne SQL komme antalet af deres brugerID i en kolonne med navnet AntalAfVaertID:
SQL = "SELECT TOP 20 profiltab.BrugerID, profiltab.Brugernavn, profiltab.Bopael, profiltab.Alder, profiltab.koen, profiltab.status, Sum(brugerpicstab.VistPic) AS VistePics, Sum(brugerpicstab.FavoritPic) AS FavoritPics, Sum(brugerpicstab.ProfilPic) AS ProfilPic, Count(brugerbesoegtab.VaertID) AS AntalAfVaertID "
SQL = SQL & "FROM (profiltab LEFT JOIN brugerpicstab ON profiltab.BrugerID = brugerpicstab.BrugerID) LEFT JOIN brugerbesoegtab ON profiltab.BrugerID = brugerbesoegtab.VaertID "
Den skal så se sådan ud, og det var faktisk også det, jeg selv nåede frem til:
SQL = SQL & "ORDER BY Count(brugerbesoegtab.VaertID) DESC"
Men der returneres nogle fuldstændig vilde værdier. F.eks. angives det at en brugers ID indgår 64546 gange i kolonnen "VaertID", selvom der kun er ca. 13000 records. Har du en forklaring på det, eller skal jeg prøve at uddybe lidt?
Det jeg mener hvis du bruger Sum(brugerbesoegtab.VaertID) så bliver det hurtigt til mange hvis VaerID er 100 og det står der 10 gange så giver det 1000. Eller buger du Count(brugerbesoegtab.VaertID) ?
Count :) Grunden til at jeg har brugt sum nogle steder er såmænd bare at posterne, der indeholder et 1-tal skal tælles, og så er det jo underordnet om der bruges count eller sum. Så sum kan uden videre ændres til count. Det forandrer intet.
Der skal *kun* sorteres efter tabellen "brugerbesoegtab", men der sker mærkelige ting, når den joines med de to andre tabeller. Sort-klausulen skal blot se sådan ud:
SQL = SQL & "ORDER BY Count(brugerbesoegtab.VaertID) DESC"
Alle Brugere fra "profiltab" skal altid udskrives uanset om deres ID indgår i de andre tabeller. Ethvert ID i disse to tabeller findes altid i "profiltab". Findes et ID ikke i "brugerpicstab" eller "brugerbesoegtab" skal count bare returnere værdien nul. Jeg kan lave en tabel, der ser ud som det recordsæt, jeg gerne vil have bygget op, hvis det gør det lidt nemmere...
Det går ikke med UNIOIN den bruges til at ligge to SELCECT efter hinaden i et recordset. Hvis man bruger JOIN så vil den tage alle records med fra tabellen brugerbesoegtab. Dette vil medføre at eks vis count og sum bliver forkerte, et lille eks:
brugertabellen: brugerID vistPic 1 10 2 2
brugerbesoegtab tabellen: VaertID 1 1 1 2 2
og den samlede tabel før count og sum bliver udført og efter JOIN (LEFT JOIN brugerbesoegtab ON profiltab.BrugerID = brugerbesoegtab.VaertID): brugerID vistPic vaertID 1 10 1 1 10 1 1 10 1 2 2 2 2 2 2
Så man så Counter og Summere: brugerID vistPic vaertID 1 30 3 2 4 2
Så man skal på en eller anden måde at lave det med at SELECT'e fra to tabeller noget i stil med dette men jeg har ikke fået det til at virke..:
SQL = "Select Top 20 profiltab.BrugerID, profiltab.Brugernavn, profiltab.Bopael, profiltab.Alder, profiltab.Koen, profiltab.Status, Sum(brugerpicstab.VistPic) As VistePics, Sum(brugerpicstab.FavoritPic) As FavoritPics, Sum(brugerpicstab.ProfilPic) As ProfilPic, brugerbesoegtab.VaertID "
SQL = SQL & "From brugerbesoegtab, profiltab Left Join brugerpicstab On profiltab.BrugerID = brugerpicstab.BrugerID "
hmm er det kun mig som har haft problemmer med eksperten de sidste par dage.. jeg har ikke kunnet logge ind i et par timer?
Jeg har prøvet lidt forskelligt, men jeg kan ikke få det i en SQL. Jeg har prøvet at lave en SQL sætning den som du har vist og gemt den i en Query/Forespørgelse i Access med navnet spm249282. Så har jeg lave denne SQL i en ASP side og så kan jeg få det til at virke med så det kræver jo så at databasen kan/må samt du vil have at den bruger en stored SQL som hjælp til en SQL forspørgelse..:
SQL = "SELECT TOP 20 Count(brugerbesoegtab.VaertID) AS AntalOfVaertID, spm249282.BrugerID, spm249282.Brugernavn, spm249282.Bopael, spm249282.Alder, spm249282.Koen, spm249282.Status, spm249282.VistePics, spm249282.FavoritPics, spm249282.ProfilPic "
SQL = SQL & "FROM spm249282 LEFT JOIN brugerbesoegtab ON spm249282.BrugerID = brugerbesoegtab.VaertID "
Ja, Eksperten er begyndt at gå ned oftere og oftere. Du må høre forsikringsselskabet, om de dækker tabt point-fortjeneste ;)
Det virker præcis, som det skal nu! Jeg ville selvfølgelig stadig mene, at det er mere elegant med én SQL i ASP-filen. Men det vigtigste er, det virker.
Er det muligt at lave et tilsvarende "trick" i MS SQL?
Jeg siger mange tak for hjælpen! Hvis du føler, det er mere end 120 point værd, så sig lige til :)
Okay - men hvis databasen understøtter det, er det faktisk en ret smart metode, som også kan spare kode i ASP-filerne. Tak endnu en gang :)
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.