Sitter och funderar på hur jag ska göra för att plocka ut lite statistik ur databasen (access)
Har en antal tabeller för exvis medlemmar, inlägg, kommentarer till inläggen osv osv.
Hur går jag tillväga om jag vill plocka ut vilket användar ID som har gjort flest av de inlägg som finns i inläggsdatabasen, och dessutom räkna hur många dessa inlägg är? Och dessutom skriva ut namnet på personen istället för ID't.
Krångligt?
Andra exempel är att ta fram hur många inlägg som finns totalt i inläggstabellen.
I inläggstabellen finns ett fält som räknar hur många gånger ett inlägg visats. Hur tar jag fram vilket inlägg som visats flest gånger?
Vilket inlägg som har flest kommentarer?
Problemet ligger i att jag inte riktigt förstår hur man gör när man först vill räkna ur tabellen och dessutom göra det efter diverse kriterier.
Någon som kan hjälpa mig lite?
------------------ I wish I had your cocaine-confidence...
Okej, ett exempel. Du får anpassa öppnngen av databasen så att det passar.
dim connect,rs
set connect = server.createobject("adodb.connection")
connect.open "dsn"
set rs = connect.execute(_
"select top 1 name,count(*) " & _
" from k_messages " & _
" group by name " & _
" order by 2 desc"
if not rs.eof then
response.write rs(0) & " har gjort flest inlägg (" & rs(1) & " stycken)"
end if
rs.close
set rs = nothing
connect.close
set connect = nothing
------------------ essentitia preter non sans multiplicandum
Tjusigt! det fungerar alldeles jättefint.
En fråga till, när jag tar fram vilket inlägg som har flest kommentarer så skrivs ju titeln och antalet kommentarer ut.
Hur ska det se om jag även vill ha med vem som skrev inlägget?
(i utskriften ungefär "inläggsnamn av Laidback (12 kommentarer)")
Jag löste det i de andra exemplen men just detta gick jag bet på :)
------------------ I wish I had your cocaine-confidence...
hmm.. nu blev det genast ett helt annat inlägg som hade flest kommentarer. :OO och det antalet stämde inte alls?
med några mindre justeringar av din ursprungskod så ser det nu ut så här
<%
set RecSet = Databas.execute(_
"select top 1 title,name,count(*) " & _
"from k_messages inner join k_comments on k_messages.id = k_comments.messid " & _
"group by title,name " & _
"order by 2 desc")
if not RecSet.eof then
response.write RecSet(0) & " av " & RecSet(1) & " som har " & RecSet(2) & " kommentarer"
end if
RecSet.close
set RecSet = nothing
%>
------------------ I wish I had your cocaine-confidence...
<%
set RecSet = Databas.execute(_
"select top 1 title,name,count(*) " & _
"from k_messages inner join k_comments on k_messages.id = k_comments.messid " & _
"group by title,name " & _
"order by [b]3[/b] desc")
if not RecSet.eof then
response.write RecSet(0) & " av " & RecSet(1) & " som har " & RecSet(2) & " kommentarer"
end if
RecSet.close
set RecSet = nothing
%>
Jo, när man skriver order by 2 så innebär det att man sorterar enligt andra kolumnen i select-listan. I och med att jag lade till kolumnen namn så blev sorteringen på fel kolumn (name).
Det är sorteringsordningen som styr vilka poster som top väljer.
------------------ essentitia preter non sans multiplicandum
Om jag ska våga vara riktigt jobbig så frågar jag hur jag gör för att länka till sidan för inläggets id :r
Sidan heter view_message.asp och anledningen till att detta kan vara prakiskt är att det inte finns någon spärr för att en användare kan döpa sina inlägg till samma sak.
Det blir då (i mitt testfall) svårt att avgöra vilket inlägg som avses. :)
------------------ I wish I had your cocaine-confidence...
<%
set RecSet = Databas.execute(_
"select top 1 title,name,id,count(*) as antal " & _
"from k_messages inner join k_comments on k_messages.id = k_comments.messid " & _
"group by title,name,id " & _
"order by 4 desc")
if not RecSet.eof then
response.write "<href='view_message.asp?id=" & recset("id") & "'>" & RecSet("title") & "</a> av " & RecSet("name") & " som har " & RecSet("antal") & " kommentarer"
end if
RecSet.close
set RecSet = nothing
%>
Jag bytte så att man använder namn i stället för nummer i recset, det underlättar om man lägger till fler fält. Jag lade också till as antal i select-satsen så att man kan namnge det värdet också. Tyvärr så tillåter inte Access att man använder det namnet i order by, där går det bara att använda nummer.
------------------ essentitia preter non sans multiplicandum
mystiken tätnar :)
återigen så blir ett annat inlägg det mest kommenterade. och, det blir ingen länk what so ever?..
jag kanske skulle slutat fråga för en stund sen :l
------------------ I wish I had your cocaine-confidence...
<%
set RecSet = Databas.execute(_
"select top 1 title,name,ID,count(*) as antal " & _
"from k_messages inner join k_comments on k_messages.ID = k_comments.messid " & _
"group by title,name,ID " & _
"order by 4 desc")
if not RecSet.eof then
response.write "<a href='view_message.asp?messID=" & recset("ID") & "'>" & RecSet("title") & "</a> av " & RecSet("name") & " som har " & RecSet("antal") & " kommentarer"
end if
RecSet.close
set RecSet = nothing
%>
tar jag bort top 1 får jag samma inlägg fortfarande?
------------------ I wish I had your cocaine-confidence...
<%
set RecSet = Databas.execute(_
"select top 1 title,name,ID,(select count(*) from k_comments where messid = km.id ) as antal " & _
"from k_messages km " & _
"order by 4 desc")
if not RecSet.eof then
response.write "<a href='view_message.asp?messID=" & recset("ID") & "'>" & RecSet("title") & "</a> av " & RecSet("name") & " som har " & RecSet("antal") & " kommentarer"
end if
RecSet.close
set RecSet = nothing
%>
------------------ essentitia preter non sans multiplicandum
Jag förstår varför det blir fel i den sista varianten, om det inte finns någon kommentar så blir resultatet av count null och de sorteras alltid först
Ett sista försök innan jag går och lägger mig
<%
set RecSet = Databas.execute(_
"select top 1 title,name,ID,(select count(*) from k_comments where messid = km.id ) as antal " & _
"from k_messages km " & _
"where exists ( select 1 from k_comments " & _
"where messid = km.id )" & _
"order by 4 desc")
if not RecSet.eof then
response.write "<a href='view_message.asp?messID=" & recset("ID") & "'>" & RecSet("title") & "</a> av " & RecSet("name") & " som har " & RecSet("antal") & " kommentarer"
end if
RecSet.close
set RecSet = nothing
%>
Får se vad morgondagen har i sitt sköte.
------------------ essentitia preter non sans multiplicandum
[Redigerat av LarsG den 02 feb 2002]
311 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849