webForumDet fria alternativet

Hjälp med avancerad sql-sats (?)

5 svar · 281 visningar · startad av jimpa

jimpaMedlem sedan jan. 2001364 inlägg
#1

Håller på med ett kategoriserat forum.
Har kollat runt lite i andra trådar på wf och fått den uppfattningen att alla inlägg ska ligga i samma tabell oavsett om inlägget är en ny tråd eller ett svar till befintlig tråd.

Nu till frågan:
Hur ska min SQL-sats se ut för att lista alla kategorier med tillhörande forum, alla moderators för resp. forum, antal inlägg, visningar (adderar alla i tabellen Threads för resp. forumID) samt visa senaste inlägget i resp. forum?
Med andra ord vill jag kunna skriva ut så som det är här på wf. :)

Har byggt upp min access db. så här:

Categories
- CatID
- cName
- cDescription

Forums
- ForumID
- fCatID
- fName
- fDescription

Moderators
- ModeratorID
- mForumID
- mMemberID

Threads
- ThreadID
- tForumID
- tCountTopics
- tCountViews
- tSubject
- tStartByMemberID

Topics
- ttTopicID
- ttForumID
- ttThreadID
- ttMemberID
- ttParentID <-- 0 = Ny tråd, annars ska parentID vara förälderns ttTopicID ?
- ttDte
- ttSubject
- ttMessage
- ttIcon

Members
- MemberID
- mNickName
- mEmail
- mPassword

m_soderlundMedlem sedan sep. 20024 733 inlägg
#2

Uj uj uj, det är mycket du begär. Omöjligt att hålla reda på allt. :(
Har du lite startkod?

jimpaMedlem sedan jan. 2001364 inlägg
#3

Startkod coming up :)

SQL = "Select...
m_soderlundMedlem sedan sep. 20024 733 inlägg
#4

Hehe, :e . Jag kan börja lite smått då..
Till att börja med - vad har threads-tabellen för funktion?

Jag nog inte ha en egen tabell för kategorierna eller forumen. Om man skippar Categories- och Forums-tabellen kan man i huvudtabellen (där i så fall alla trådar och svar finns) ha en kolumn som heter exempelvis Category samt en kolumn som heter Forum, i vilka man lagrar kategorin samt respektive forum. Att hämta data från denna tabell vore i så fall ganska simpelt, och vi säger att tabellen ser ut så här:

topics
- ttTopicID
- ttForumID
- ttCategory
- ttMemberID
- ttParentID <-- 0 = Ny tråd, annars ska parentID vara förälderns ttTopicID?
- ttDte
- ttSubject
- ttMessage
- ttIcon

Sen kan man med en SQL-sats plocka ut lite grejor, ungefär så här kanske:

SELECT a.ttTopicID,a.ttSubject,a.ttIcon,a.ttDte,
(SELECT Count(b.ttParentID) FROM topics b WHERE a.ttTopicID=b.ttTopicID) AS replies
FROM topics a WHERE ttForumID=2 AND ttCategory='ASP/VBScript'

Nu kanske min kod verkar lite jobbig, den gör en JOIN på samma tabell, och (förhoppningsvis) räknar antalet svar som är knutna till aktuell ttTopicID som skrivs ut. Hoppas det här ger en liten start. :D

jimpaMedlem sedan jan. 2001364 inlägg
#5

Nej jag tror inte att jag vill tabort tabellen för varken Katergorin eller Forum, det måste gå att lösa ändå.

Okey, så här långt har jag kommit:

Så här ser min SQL ut just nu:

SQL = "SELECT fCategories.*, Forums.*, fModerators.*, Members.* FROM (((fCategories 
LEFT JOIN Forums ON fCategories.CatID = Forums.fCatID) 
LEFT JOIN fModerators ON (Forums.ForumID = fModerators.mForumID)) 
LEFT JOIN Members ON (fModerators.mMemberID = Members.MemberID)) 
ORDER BY fCategories.cName, Forums.fName ASC"

Skriver ut med GetRows så här:

arrRecs = RS.GetRows() 
TmpID = 0
	
   for i = 0 to ubound(arrRecs,2)
       'KOLLAR SÅ ATT INTE KATEGORIN HAR SKRIVITS UT. OM INTE SKRIVER UT NAMNET PÅ KATEGORIN
              if TmpID <> clng(arrRecs(0,i)) then
       	Response.Write "<b>" & arrRecs(1,i) & "</b><br>"
			TmpID = clng(arrRecs(0,i))
			
			        'LOOPAR OCH SKRIVER UT NAMNEN PÅ ALLA FORUM  FÖR RESP. KATEGORI
'!!! HÄR NÅGONSTANS MÅSTE JAG LOOPA IGENOM ALLA MODERATORS OCH
SEDAN SPARA ALLA MODERATORS NAMN I STRÄNG INNAN UTSKRIFTEN FÖR FORUMET!!!
FÖR ATT FÖRHINDRA ATT FORUMET SKRIVS UT MER ÄN EN GÅNG
          for j = i to ubound(arrRecs,2)
              if TmpID <> clng(arrRecs(4,j)) then exit for
       	Response.Write "Forum namn: " & arrRecs(5,j) & " , Moderator: " & arrRecs(15,j) & "<br>"
          next
          end if
   next
End If

Problem 1
Om det finns fler än en moderator för ett forum skrivs Forumet ut lika många ggr. som det finns moderators.
Typ:
----------
Kategori1
----------
Forumnamn1 . ModeratorNisse
Forumnamn1 - ModeratorKalle
Forumnamn1 - ModeratorLasse

Jag vill att det skrivs ut så här:
Kategori1
----------
Forumnamn1 . ModeratorNisse,ModeratorKalle,ModeratorLasse

Jag har sökt och hittade denna tråd med precis samma problem :)
Men självklart fanns det ingen enkel kod att leka med, men dock en förklaring hur man kan gå tillväga.
Är det någon som förstår och kan visa hur koden ska se ut för att få utskriften som jag vill ha det?

Problem 2
Jag har redan startat en tråd i ASP-forumet när det gäller utskriften av SQL-satsen, senare kom jag på att jag jag har problem med SQL-satsen och startade denna tråd.
Nu är jag lite förvirrad och vet inte vilken tråd som jag ska fortsätta posta i, men jag fortsätter här eftersom jag har postat mina tabeller i db här.

jimpaMedlem sedan jan. 2001364 inlägg
#6

Ingen som kan?

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb