För att få de 10 som skrivit mest totalt sett
query = "select top 10 skribent,sum(len(meddelande)) as totalLength from forum group by skribent order by 2 desc"
13 svar · 323 visningar · startad av ampy
Har denna kod:
Set uRS = Connect.Execute("select avg(len(meddelande)) as averageLength from forum where skribent = '"&username&"'")
Response.Write Round(uRS("averageLength"),1)
Av denna kod vill jag skriva ut alla top10 skribenter i rangordnig av den som har mest tecken, hur ska man göra det?
En skribent ska också bara skrivas ut en gång.
För att få de 10 som skrivit mest totalt sett
query = "select top 10 skribent,sum(len(meddelande)) as totalLength from forum group by skribent order by 2 desc"
Men jag vill ha i genomsnitt per post, går inte det eller?
Allt går med sql, det kan bara vara lite svårt att tolka vad du menar.
Set uRS = Connect.Execute("select skribent,avg(len(meddelande)) as averageLength from forum group by skribent order by 2 desc")
De 10 skribenter som har de i genomsnitt längsta inläggen.
Så här ser koden ut nu och det fungerar bra:
<%
query2 = "select top 10 skribent,avg(len(meddelande)) as averageLength from forum group by skribent order by 2 desc"
set rs = connect.execute(query2)
c = 0
if not rs.eof then
response.write "De 10 som har mest tecken per inlägg: <br>"
do while not rs.eof
c = c + 1
response.write "<b><font color='#BE0202'>" & c & ".</font></b> " & rs("skribent") & " <font color='#676767'>(" & round(rs("averageLength"),2) & " tecken" & ")</font><br>"
if c = 10 then exit do
rs.movenext
loop
end if
%>
Men för att krångla till det ytterligare ;)
vill jag endast skriva ut de medlemmar som har ordet
ja i kolumnen tecken i tabellen affar.
I tabellen affar har jag en kolumn som heter medlemsid och där står det vad medlemmen har för id och i tabellen forum vet man medlemmen id genom kolumnen skribent_id
Hur ska man kolla det?
query2 = "select top 10 skribent,avg(len(meddelande)) as averageLength " & _
" from forum inner join affar on forum.skribentid = affar.medlemsid " &_
" where tecken = 'ja' " & _
" group by skribent order by 2 desc"
Nu får jag Typblandningsfel i uttryck på SQL-satsen.
har du olika datatyper för kolumnerna forum.skribentid och affar.medlemsid?
Både borde vara av typen tal.
affar.medlemsid är av typen text, hur ska man skriva då?
Jag tycker att du skall ändra typen för den kolumnen till tal
Du kanske tycker det men det tycker inte jag :l
Men hur ska man skriva SQL-satsen om affar.medlemsid är av typen text?
Om du vill kunna jämföra två kolumner så måste de vara av samma typ. Att använda samma typ för kolumner som skall relateras är nödvändigt och utgör den grund varpå all god databasdesign vilar.
Ge mig ett skäl för att inte byta datatyp. Du kan göra det direkt i Access utan att behöva ladda om tabellen.
För då måste jag ändra på en massa andra sidor + att jag måste ladda ner databasen från webbhotellet och sedan ladda upp den igen. Men om det inte går att jämföra två kolumnerav olika typer måste jag väl göra detta. :(
Det går, men det blir inte effektivt
query2 = "select top 10 skribent,avg(len(meddelande)) as averageLength " & _
" from forum inner join affar on forum.skribentid = clng(affar.medlemsid) " &_
" where tecken = 'ja' " & _
" group by skribent order by 2 desc"
Visst, men du bör tänka på det när du skapar dina tabeller.