Avatar billede running_fast Nybegynder
25. april 2004 - 18:50 Der er 7 kommentarer og
1 løsning

Hente top 5 ud af DB

Jeg vil hente de 5 billeder ud med flest hits ... hvad er galt i koden her ??
<%
Dim Connect1, RS_Outer1, RS_Inner1, RS_MainMessage1
Set Connect1 = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("database/foto.mdb")
Connect1.Open strDSN
%>

<%
Set RS_MainMessage1 = Connect1.Execute("SELECT TOP 5 * FROM billeder ORDER BY hits DESC")
top_hits = RS_MainMessage1("hits")
top_hiturl = RS_Mainmessage1("hiturl")
top_wwidth = RS_MainMessage1("wwidth")
top_wheight = RS_MainMessage1("wheight")
top_thumb = RS_MainMessage1("thumb")
top_theight = RS_MainMessage1("theight")
top_des = RS_MainMessage1("Des")
top_dato = RS_MainMessage1("Dato")
%>

<% for i = 1 to 5 %>
<table border="0" width="305" cellspacing="0" cellpadding="0">
            <tr>
            <td width="150" class="left" valign="top">
            <a href="<%=top_hiturl%>" class="billede" onclick="NewWindow(this.href,'vindue','<%=top_wwidth%>','<%=top_wheight%>','no','center');return false" onfocus="this.blur()"><img src="<%=top_thumb%>" width="150" height="<%=top_theight%>" border="0"></a>
            <br></td>
            <td width="5" class="blank">&nbsp;</td>
            <td width="150" class="text" valign="top">
            <span class="left">
            Uploaded : <%=top_dato%>.<br>
            Set : <%=top_hits%> gang(e).
            <br>
            <span class="small3"><%=top_des%>
            <br>
            </td>
            </tr>
            </table>

<%
rs_mainmessage1.Movenext
Wend
end if %>
Avatar billede running_fast Nybegynder
25. april 2004 - 19:04 #1
Sorry,
slutningen se sådan her ud....
<%
rs_mainmessage1.Movenext
next
%>
Avatar billede tbm_iceman Nybegynder
25. april 2004 - 19:11 #2
du skal ændre din SQL streg til:

Set RS_MainMessage1 = Connect1.Execute("SELECT TOP 5 * FROM billeder ORDER BY hits ASC")
Avatar billede eagleeye Praktikant
25. april 2004 - 19:13 #3
Den skriver de samme ud 5 gange fordi du fylder din variable uden for for sætningen.

Så dette:
Set RS_MainMessage1 = Connect1.Execute("SELECT TOP 5 * FROM billeder ORDER BY hits DESC")
top_hits = RS_MainMessage1("hits")
top_hiturl = RS_Mainmessage1("hiturl")
top_wwidth = RS_MainMessage1("wwidth")
top_wheight = RS_MainMessage1("wheight")
top_thumb = RS_MainMessage1("thumb")
top_theight = RS_MainMessage1("theight")
top_des = RS_MainMessage1("Des")
top_dato = RS_MainMessage1("Dato")
%>

<% for i = 1 to 5 %>


skal være;


Set RS_MainMessage1 = Connect1.Execute("SELECT TOP 5 * FROM billeder ORDER BY hits DESC")
for i = 1 to 5

top_hits = RS_MainMessage1("hits")
top_hiturl = RS_Mainmessage1("hiturl")
top_wwidth = RS_MainMessage1("wwidth")
top_wheight = RS_MainMessage1("wheight")
top_thumb = RS_MainMessage1("thumb")
top_theight = RS_MainMessage1("theight")
top_des = RS_MainMessage1("Des")
top_dato = RS_MainMessage1("Dato")
%>
Avatar billede running_fast Nybegynder
25. april 2004 - 19:16 #4
eagleeye> Der ser ud til at være problemer med afslutningen :
<%
rs_mainmessage1.Movenext
next
%>

idé ??
Avatar billede eagleeye Praktikant
25. april 2004 - 19:19 #5
Hvad er fejlen?

Hvis du ikke har 5 får du en fejl med BOF eller EOF. Du bør lave det med en

do while not rs.EOF


og ikke en for sætning. Så din kode bliver:


<%
Dim Connect1, RS_Outer1, RS_Inner1, RS_MainMessage1
Set Connect1 = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("database/foto.mdb")
Connect1.Open strDSN
%>

<%
Set RS_MainMessage1 = Connect1.Execute("SELECT TOP 5 * FROM billeder ORDER BY hits DESC")
do while not RS_MainMessage1.EOF
top_hits = RS_MainMessage1("hits")
top_hiturl = RS_Mainmessage1("hiturl")
top_wwidth = RS_MainMessage1("wwidth")
top_wheight = RS_MainMessage1("wheight")
top_thumb = RS_MainMessage1("thumb")
top_theight = RS_MainMessage1("theight")
top_des = RS_MainMessage1("Des")
top_dato = RS_MainMessage1("Dato")
%>
<table border="0" width="305" cellspacing="0" cellpadding="0">
            <tr>
            <td width="150" class="left" valign="top">
            <a href="<%=top_hiturl%>" class="billede" onclick="NewWindow(this.href,'vindue','<%=top_wwidth%>','<%=top_wheight%>','no','center');return false" onfocus="this.blur()"><img src="<%=top_thumb%>" width="150" height="<%=top_theight%>" border="0"></a>
            <br></td>
            <td width="5" class="blank">&nbsp;</td>
            <td width="150" class="text" valign="top">
            <span class="left">
            Uploaded : <%=top_dato%>.<br>
            Set : <%=top_hits%> gang(e).
            <br>
            <span class="small3"><%=top_des%>
            <br>
            </td>
            </tr>
            </table>

<%
  rs_mainmessage1.Movenext
loop
%>
Avatar billede running_fast Nybegynder
25. april 2004 - 19:26 #6
tak, det virker bedre...

eneste problem er, hvis der er flere entry i DB'en med samme antal hits, så viser den mere end 5 (med denne kode får jeg 6!).

Et tillægsspørgsmål kunne jo være, hvordan man begrænsede den til KUN 5 udtræk fr DB'en ?
Avatar billede eagleeye Praktikant
25. april 2004 - 19:28 #7
Så må du også tilføje dit autonummer kolonne i ORDER BY sådan hvis der er flere ens sorteres efter ID så kommer der kun 5.


Set RS_MainMessage1 = Connect1.Execute("SELECT TOP 5 * FROM billeder ORDER BY hits DESC, ID")
Avatar billede running_fast Nybegynder
25. april 2004 - 19:30 #8
Herligt ! ... Det er hvad jeg virkelig kan lide ved eksperten.dk : de kloge hoveder, som ved en masse, er altid klar til at hjælpe os andre !

Takker !!!
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