webForumDet fria alternativet

göra en topplista

ASPur ASP

13 svar · 323 visningar · startad av ampy

Medlem sedan feb. 20011 498 inlägg
Frågan#1

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.

Medlem sedan dec. 200012 464 inlägg
#2

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"
Medlem sedan feb. 20011 498 inlägg
#3

Men jag vill ha i genomsnitt per post, går inte det eller?

Medlem sedan dec. 200012 464 inlägg
#4

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.

Medlem sedan feb. 20011 498 inlägg
#5

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?

Medlem sedan dec. 200012 464 inlägg
#6
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"
Medlem sedan feb. 20011 498 inlägg
#7

Nu får jag Typblandningsfel i uttryck på SQL-satsen.

Medlem sedan dec. 200012 464 inlägg
#8

har du olika datatyper för kolumnerna forum.skribentid och affar.medlemsid?

Både borde vara av typen tal.

Medlem sedan feb. 20011 498 inlägg
#9

affar.medlemsid är av typen text, hur ska man skriva då?

Medlem sedan dec. 200012 464 inlägg
#10

Jag tycker att du skall ändra typen för den kolumnen till tal

Medlem sedan feb. 20011 498 inlägg
#11

Du kanske tycker det men det tycker inte jag :l

Men hur ska man skriva SQL-satsen om affar.medlemsid är av typen text?

Medlem sedan dec. 200012 464 inlägg
#12

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.

Medlem sedan feb. 20011 498 inlägg
#13

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. :(

Medlem sedan dec. 200012 464 inlägg
#14

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.

131 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)