webForumDet fria alternativet

Hjälp med SQL query!

3 svar · 181 visningar · startad av JE

JEMedlem sedan juni 2000144 inlägg
#1

Håller på med ett litet forum. Har strukturerat upp det på följande sett:

1: Sektioner
2: Forums
3: Trådar
4: Inlägg

Dvs, under en sektion finns det olika forums och under varje forum finns olika trådar osv..

Nu tänkte jag lista alla sektioner på en sidan och samtidigt lista alla forum för varje sektion med antalet trådar och antalet inlägg.

SQL strängen ser ut så här:

SELECT F_ForumID, F_Name, (SELECT COUNT(FT_ThreadID) as ThreadCnt FROM ForumThreads WHERE FT_ForumID=F_ForumID) as F_Threads, (SELECT COUNT(FP_PostID) as PostCnt FROM ForumPosts WHERE FP_ThreadID=FT_ThreadID) as F_Posts WHERE F_Active='Y' AND F_Visible='Y' AND F_AreaID=2

Felmeddelandet jag får:
MySQL said: You have an error in your SQL syntax near 'SELECT COUNT(FT_ThreadID) as ThreadCnt FROM ForumThreads WHERE FT_ForumID=F_Foru' at line 1

------------------
/JE

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Mysql tillåter inte att man har select-satser direkt i kolumn-listan.

Du får nog skriva om det och använda group by och eventuellt dela upp det i olika sql-satser. (Det kan gå att lösa med outer join och count (distinct *))

Ett alternativ är att du lagrar information om antal trådar och inlägg direkt i respektive tabell.

------------------
essentitia preter non sans multiplicandum

JEMedlem sedan juni 2000144 inlägg
#3

Ändrade SQL strängen till denna:

SELECT F_ForumID, F_Name, COUNT(FT_ThreadID) as F_Threads, COUNT(FP_PostID) as F_Posts, MAX(FP_PostDate) as F_LastPost FROM ForumAreas INNER JOIN Forums ON ForumAreas.FA_AreaID=Forums.F_AreaID INNER JOIN ForumThreads ON Forums.F_ForumID=ForumThreads.FT_ForumID INNER JOIN ForumPosts ON ForumThreads.FT_ThreadID=FP_ThreadID WHERE F_Active='Y' AND F_Visible='Y' AND F_AreaID=2

Nu blir felet:
MySQL said: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause

Inte använt Group tidigare, hur funkar det? Hur ska jag skriva SQL strängen?

------------------
/JE

[Redigerat av JE den 05 sep 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#4
SELECT F_ForumID, F_Name, COUNT(distinct FT_ThreadID) as F_Threads, COUNT(FP_PostID) as F_Posts, MAX(FP_PostDate) as F_LastPost FROM ForumAreas INNER JOIN Forums ON ForumAreas.FA_AreaID=Forums.F_AreaID INNER JOIN ForumThreads ON Forums.F_ForumID=ForumThreads.FT_ForumID INNER JOIN ForumPosts ON ForumThreads.FT_ThreadID=FP_ThreadID WHERE F_Active='Y' AND F_Visible='Y' AND F_AreaID=2 group by F_ForumID, F_Name

------------------
essentitia preter non sans multiplicandum

250 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
128 ms — hämta forumlista (db)
119 ms — hämta statistik (db)
128 ms — hämta tråd, inlägg och bilagor (db)