webForumDet fria alternativet

Loop?

12 svar · 380 visningar · startad av magnusfeldth

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#1

Jag håller på och gör ett forum.

Forumet har olika kategorier, vi kan kalla dem för Frukt, Kött och Mjölk. Till dessa olika kategorier finns trådar.

Kategorierna sparas i en databas och trådarna i en annan.

Jag vill loopa ut forumkategorierna och sedan under respektive forumkategori loopa ut de trådar som hör till respektive kategori.

Typ exempel:

Kött
- Köttråd nummer 1
- Köttråd nummer 2

Frukt
- Skala banan
- Rotfrukter

Mjölk
- Muu
- Mellanmjölk eller standardmjölk?

Jag försökte med denna koden:

<%	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("db/hhgsdb.mdb")

	Set RecSet = Server.CreateObject("ADODB.Recordset")
    Visa = "SELECT * FROM Forumkategori WHERE Visa ='Ja' Order by Ordning"

   RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic %>

<% Do Until RecSet.EOF %>
<% =RecSet("Rubrik") %>

<%    
                     Set RecSet = Server.CreateObject("ADODB.Recordset")
                     Visa2 = "SELECT top 5 * FROM foruminlagg ORDER BY ForumID DESC"
   RecSet.Open Visa2, Connect, adOpenStatic, adLockOptimistic %>
<% Do Until RecSet.EOF %>
<% =RecSet("Rubrik") %>
<% RecSet.Movenext
loop
%>    
<% RecSet.Movenext
loop
Recset.Close
Connect.Close

Set Recset = Nothing
Set Connect = Nothing
%>

men det går åt pipsvängen... hur göra?

Engine^Medlem sedan dec. 20003 887 inlägg
#2

Byt namn på ditt andra recordset. Som du har nu så skriver du över ditt första recset på en gång. Inte bra ;)

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" & Server.MapPath("db/hhgsdb.mdb")

Set objForum = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT Rubrik FROM Forumkategori WHERE Visa ='Ja' ORDER BY Ordning"

objForum.Open strSQL, Connect, adOpenStatic, adLockReadOnly

Do Until RecSet.EOF
  Response.Write RecSet(0) & "<br>"

  Set objThreads = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT TOP 5 Rubrik FROM foruminlagg ORDER BY ForumID DESC"
  objThreads.Open strSQL Connect, adOpenStatic, adLockReadOnly

    Do Until RecSet.EOF
      Response.Write "- " & RecSet(0) & "<br>"

      RecSet.Movenext
    Loop

  objThreads.Close

  RecSet.Movenext
Loop

Set objThreads = Nothing

objForum.Close
Set objForum = Nothing

Connect.Close
Set Connect = Nothing
%>
PalleMedlem sedan apr. 20003 174 inlägg
#3

Du måste på ett eller annat sätt spara ID´t på din kategori i tabellen för inläggen så att du via detta id kan
koppla samman inlägg med rätt kategori, något du enklast gör när du skapar kategorier och sparar nya inlägg.

Här kommer ett litet förslag:
OBS Helt otestat då jag inte har Access installerat just nu!

Tabell1: Forumkategori
ID   |   Kategori   |   Visa

Tabell2: Foruminlagg
ID   |   Rubrik |   KategoriID

Exempel på kod:

[red]<%

Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("db/hhgsdb.mdb")

		Set RecSet = Connect.Execute("SELECT k.ID, k.Kategori, COUNT(i.ID) FROM Forumkategori k, Foruminlagg i WHERE k.Visa='Ja' AND i.KategoriID=k.ID GROUP BY k.ID, k.Kategori ORDER BY 1")
			If NOT RecSet.EOF Then arrKategori = RecSet.GetRows()
			RecSet.Close

		Set RecSet = Connect.Execute("SELECT k.ID, i.ID, i.Rubrik FROM Forumkategori k, Foruminlagg i WHERE i.KategoriID=k.ID GROUP BY k.ID, i.ID, i.Rubrik ORDER BY 1")
			If NOT RecSet.EOF Then arrInlagg = RecSet.GetRows()
			RecSet.Close
		Set RecSet = Nothing

	Connect.Close
Set Connect = Nothing

'//---------------------------------------------------------------------------------------------
'// Output	

x=0
If IsArray(arrKategori) Then
	For i = 0 To UBound(arrKategori, 2)

		'// Kategorier
		intID = arrKategori(0,i)
		strKategori = arrKategori(1,i)
		intAntalInlagg = arrKategori(2,i)
		Response.Write strKategori &"<br>"

		For s = 0 To cInt(intAntalInlagg)-1

			'// Inlägg
			intInlaggID = arrInlagg(1,x)
			strInlaggRubrik = arrInlagg(2,x)
			Response.Write "- "& strInlaggRubrik &" (id:"& intInlaggID &")<br>"
			x=x+1

		Next
		If NOT i = UBound(arrKategori, 2) Then Response.Write "<br>"

	Next
End If

%>[/red]
magnusfeldthMedlem sedan jan. 20034 480 inlägg
#4

Så här ser (förenklat) tabellerna ut:

tabell 1: forumkategori
FKategoriID
Rubrik
Ordning
Visa

tabell 2: Foruminlagg
ForumID
Rubrik
Text
Forumkategori (som kopplas till "Rubrik" på tabellen "forumkategori")

hur ska koden se ut då? Testade Engine^:s kod, men fick detta felmesset:

Kompileringsfel i Microsoft VBScript (0x800A0401)
Slut på programsats förväntas.
/hhgspunktse/hhgs/forum.asp, line 29, column 23
objThreads.Open strSQL Connect, adOpenStatic, adLockReadOnly
----------------------^
@ndersMedlem sedan juni 200032 969 inlägg
#5

Släng in ett komma då...

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#6

ok, fixat kommat :-) ... men nu blir det felmess:

Körningsfel i Microsoft VBScript (0x800A01A8)
Objekt krävs.: ''
/hhgspunktse/hhgs/forum.asp, line 24

istället...
line 24:

Do Until RecSet.EOF
@ndersMedlem sedan juni 200032 969 inlägg
#7

Då kontrollerar man att Engine^ angett rätt objektnamn i sin kod...

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#8

skall det vara "Do Until objForum.EOF"? då blir "recset" på rad 25 inkompatibelt istället...

Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'RecSet'
/hhgspunktse/hhgs/forum.asp, line 25

måste jag ändra alla recset? ska jag då skriva för att få ut nåt ur kolumnen Rubrik till exempel? obj.Forum("rubrik") eller?

Jesper TMedlem sedan nov. 20017 144 inlägg
#9

Och vad med: Do Until NOT objForum.EOF ?

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#10

Jesper T skrev:

Och vad med: Do Until NOT objForum.EOF ?

???

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#11

Fått det löst... bytte ut alla recset till recset2 i andra förfrågan.

Dock, har jag inte fått nån bra if-sats som gör att den bara listar inlägg med matchande kolumn "forumkategori" till kolumnen "rubrik" i den första förfrågan.

PalleMedlem sedan apr. 20003 174 inlägg
#12

Nog snarare så att du ska använda en WHERE i den andra sql-satsen..
Hur ser din kod ut nu?

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#13

nu är problemet löst, jag kan posta koden så att andra kan se hur man kunde göra. Dock kan jag göra detta först i eftermiddag.

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