webForumDet fria alternativet

Bästa sättet att loopa i en loop?

ASP

9 svar · 418 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

Hur gör man för att på bästa/resurs snålaste sättet en loop i en loop?

Exempel:


<%
SQL="SELECT huvud_cat,titel FROM forum ORDER BY diskusrubrik"

Set Rs=Server.CreateObject("ADODB.Recordset")
Rs.open SQL, Connect, 3,3

Do until Rs.eof

Response.Write Rs(1) &"<hr>" 

'------- Börja loopa ut underkategorierna ---------------------------
SQL="SELECT rubrik,datum FROM forum_poster WHERE huvud_cat="& Rs(0) &" ORDER BY datum DESC LIMIT 5"

Set Rs2=Server.CreateObject("ADODB.Recordset")
Rs2.open SQL, Connect, 3,3

Response.Write Rs2(0) &" - "& Rs2(1)

Rs2.movenext
loop

Rs2.Close : Set Rs2 = Nothing
'------------------------------------
Rs.movenext
loop

Rs.Close : Set Rs = Nothing
%>

Finns det något snabbare och mer resurssnålt sätt?
Använder en MySQL 4.0.18-nt databas.

Medlem sedan juni 20034 013 inlägg
#2

Ja, att bara ställa en SQL-fråga borde vara snabbare:

SELECT rubrik, datum, huvud_cat, titel FROM forum ORDER BY diskusrubrik, huvud_cat, datum DESC

Sen kan du använda en variabel som du sparar föregående huvudrubrik i. Så fort aktuell huvudrubrik inte är samma som den i variabeln skriver du ut huvudrubriken och sparar den aktuella rubriken i variabeln.

Medlem sedan nov. 20031 018 inlägg
#3

Förstår inte hur du menar :(

Medlem sedan juni 20034 013 inlägg
#4

Som det ser ut nu börjar du ju med en SQL-fråga för att få fram alla huvudkategorier. Sedan kör du ytterligare en SQL-fråga för varje huvudkategori för att få fram respektive underkategorier.

Det blir många SQL-frågor till slut. Att bara köra en istället, som plockar fram samtliga huvudkategorier och underkategorier med en gång borde gå snabbare.

Med så långt?

Medlem sedan dec. 1999707 inlägg
#5

Är det samma tabell för forum och foruminlägg?

Medlem sedan nov. 20031 018 inlägg
#6

Nej det är det inte

Medlem sedan nov. 20031 018 inlägg
#7

Byggde om forumet lite och tänkte höra med proffsen om det är bättre att bygga upp forumet så här?

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<%
Dim Rs,Rs2

Set Rs = Connect.Execute("SELECT id,namn,beskriv FROM forum_cat WHERE sub=0 ORDER BY namn DESC")

Do until Rs.eof
%>
                      <tr> 
                        <td colspan="4" height="1" bgcolor="#CCCCCC"></td>
                      </tr>
                      <tr> 
                        <td colspan="4"><%=Rs("namn")%></td>
                      </tr>
                      <tr> 
                        <td colspan="4" height="1" bgcolor="#CCCCCC"></td>
                      </tr>
<%
Set Rs2 = Connect.Execute("SELECT namn,beskriv FROM forum_cat WHERE sub="& Rs("id") &" ORDER BY namn DESC")

Do until Rs2.eof
%>					  
                      <tr> 
                        <td width="54%"><%=Rs2("namn")%></td>
                        <td width="8%">&nbsp;</td>
                        <td width="8%">&nbsp;</td>
                        <td width="30%">&nbsp;</td>
                      </tr>
<%
Rs2.movenext
loop

Rs2.Close : Set Rs2 = Nothing
%>					  
                      <tr> 
                        <td colspan="4" height="1" bgcolor="#CCCCCC"></td>
                      </tr>
<%
Rs.movenext
loop

Rs.Close : Set Rs = Nothing
%>
                    </table>

Skulle helst vilja få in Rs2 i samma SQL sats som Rs.
Berätta gärna om ni har något bättre förslag på hur man kan göra.

Medlem sedan nov. 20031 018 inlägg
#8

Ingen?
Använder en MySQL 4.0.18-nt databas.

Medlem sedan nov. 20031 018 inlägg
#9

Löste d.

Medlem sedan maj 200430 inlägg
#10

Bosse168 skrev:

Löste d.

Hur? Du kan ju dela med dig av dina lösningar?

256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)