Avatar billede blaatand Nybegynder
20. september 2003 - 02:29 Der er 21 kommentarer og
2 løsninger

Beregn antal af samme i en tabel

Har en tabel i min database som heder T_DOWNLOADS_STATS, herunder er der så en kolonne der heder M_DL_ID. Når man klikker på et download link på min side gemmers der ID'et på det som er blevet downloaded.

Så skal jeg så kunne gå ind og sige at der f.eks er 5 af ID nr 1, og 3 af ID nr 2, og 1 af ID nr 3. Og så skal den generere hvilken en af dem der har fået flest hist (altså i dette tilfælde nr 1)... Og så derefter skal det skrives ud på en top 10, som viser de 10 mest populære!
Avatar billede nielle Nybegynder
20. september 2003 - 07:41 #1
SELECT M_DL_ID, count(*) AS Samme GROUP BY M_DL_ID
Avatar billede nielle Nybegynder
20. september 2003 - 07:41 #2
...og måske virker:

SELECT M_DL_ID, count(*) AS Samme GROUP BY M_DL_ID ORDER BY Samme
Avatar billede blaatand Nybegynder
20. september 2003 - 13:18 #3
Order by samme, hvad betyder samme? Hvad bruges den til mener jeg!
Avatar billede blaatand Nybegynder
20. september 2003 - 13:27 #4
Når man så bruger denne kode, hvordan henter man så informationen ud af denne sql? Jeg kan jo ikke bare bruge conn.execute, og så have nogle fastlagte variabler for den med flest i, og næstbedste osv...
Avatar billede nielle Nybegynder
20. september 2003 - 13:42 #5
"GROUP BY" samler alle de M_DL_ID som har den samme værdi.

Antallet af disse tælles sammen - "count(*) AS Samme" - og kan efterfølgende findes under navnet "Samme" - det er det "AS Samme" delen gør.

"ORDER BY Samme" sortere dem så efter faldende værdi.

For at få fat på dem skal du lave følgende ASP:

SQL = "SELECT M_DL_ID, count(*) AS Samme GROUP BY M_DL_ID ORDER BY Samme"
set rs = Conn.Execute(SQL)

do while not rs.eof
  Response.Write("Der er " & rs("Samme") & " af indeks " & rs("M_DL_ID") & "<br>")
  rs.MoveNext
loop
Avatar billede blaatand Nybegynder
20. september 2003 - 13:44 #6
ok, prøver :) !
Avatar billede blaatand Nybegynder
20. september 2003 - 13:46 #7
jeg får fejlen:

Microsoft OLE DB Provider for ODBC Drivers error '80040e0c'

Command text was not set for the command object.

/downloads.asp, line 157


Lines 156 og 157 er dette:
                                strSQL = "SELECT M_DL_ID, count(*) AS Samme GROUP BY M_DL_ID ORDER BY Samme"
                                set rs = Conn.Execute(SQL)
Avatar billede nielle Nybegynder
20. september 2003 - 14:12 #8
Ret:

set rs = Conn.Execute(SQL)

- til:

set rs = Conn.Execute(strSQL)
Avatar billede blaatand Nybegynder
20. september 2003 - 14:14 #9
how :D

Arj, hvor noobed!
Avatar billede blaatand Nybegynder
20. september 2003 - 14:15 #10
Så får jeg:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.

/downloads.asp, line 157
Avatar billede nielle Nybegynder
20. september 2003 - 14:20 #11
Vi mangler FROM-delen - vi hat ikke fortalt hvilken tabel vi henter data fra.

strSQL = "SELECT M_DL_ID, count(*) AS Samme FROM T_DOWNLOADS_STATS GROUP BY M_DL_ID ORDER BY Samme"
Avatar billede blaatand Nybegynder
20. september 2003 - 14:22 #12
Havde det godt på fornemmelsen at den manglede.

Nu får jeg:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/downloads.asp, line 157
Avatar billede blaatand Nybegynder
20. september 2003 - 14:24 #13
Koden ser således ud nu:

                                strSQL = "SELECT M_DL_ID, count(*) AS Samme FROM T_DOWNLOADS_STATS GROUP BY M_DL_ID ORDER BY Samme"
                                set rs = Conn.Execute(strSQL)
                               
                                do while not rs.eof
                                Response.Write("Der er " & rs("Samme") & " af indeks " & rs("M_DL_ID") & "<br>")
                                rs.MoveNext
                                loop
Avatar billede nielle Nybegynder
20. september 2003 - 14:26 #14
Prøv lige at udelade "ORDER BY Samme" delen:

strSQL = "SELECT M_DL_ID, count(*) AS Samme FROM T_DOWNLOADS_STATS GROUP BY M_DL_ID"
Avatar billede blaatand Nybegynder
20. september 2003 - 14:29 #15
Så virker det...
Avatar billede blaatand Nybegynder
20. september 2003 - 14:29 #16
Der er 1 af indeks 17
Der er 1 af indeks 18
Der er 1 af indeks 23
Der er 4 af indeks 26
Der er 1 af indeks 27
Der er 1 af indeks 29
Der er 1 af indeks 32
Avatar billede nielle Nybegynder
20. september 2003 - 14:35 #17
Så virkede "ORDER BY Samme" delen desværre ikke - MySQL tillader ikke denne konstruktion. Jeg frygtede det faktisk lidt (det var derfor jeg startede med to mulige svar 07:41:00 og 07:41:38).

Så nu har du altså bare problemet med at ordne dem efter hvor der er flest hits.
Avatar billede blaatand Nybegynder
20. september 2003 - 14:37 #18
Ja, det er det jeg sider og funderer over nu 8-)

Hvordan faen skal man gøre det...
Avatar billede nielle Nybegynder
20. september 2003 - 14:43 #19
Siden at SQL ikke kan gøre det så må du jo klare denne del med ASP. Indlæs værdierne i et array og sortere dem der.
Avatar billede blaatand Nybegynder
20. september 2003 - 14:45 #20
Jeg har ikke arbejdedt med Arrays før...
Avatar billede blaatand Nybegynder
20. september 2003 - 14:46 #21
Giver 60 points nu, da det er blevet et lidt større projekt end jeg troede...
Avatar billede blaatand Nybegynder
20. september 2003 - 16:17 #22
Lukker dette SPM og giver dig halvdelen af points som tak for hjælpen hertil.

Og laver så et nyt SPM hvor jeg kan få hjælp til arrays :)
Avatar billede nielle Nybegynder
22. september 2003 - 10:06 #23
Takker for points.

Så iøvrigt at du havde fundet resten af løsningen i et andet spørgsmål - så lærte jeg da også lidet mere SQL selv :^)
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