Vinnaren i pepparkakshustävlingen!
2007-06-15, 10:27
  #1
Medlem
oGGos avatar
Tjena!

Håller på att pula med ett forum och har stött på patrull när jag skall räkna ut antal posts i forumet.

SQLen för att hämta detta är:
Kod:
SELECT Forumthreads.*,
  (SELECT Count(*) FROM Forumposts WHERE Threadid = Forumposts.Postthreadid) AS nummer,
  (SELECT SUM(nummer) FROM Forumthreads WHERE Threadforumid = 5 AND Threadcityid = 2) AS AntalPosts
FROM Forumthreads
GROUP BY Threadforumid

Resultat:
Kod:
threadid, threadsubject, threadhits, threadsticky, threadforumid, threadlocked, threadcityid, nummer, AntalPosts

29,       'Tjena!',      109,        0,            5,             0,             2,            7,      63
34,       'Jooooorå',    17,         1,            5,             0,             2,            3,      27
35,       'Mjo',         21,         1,            5,             0,             2,            1,      9
36,       'aaa..',       46,         0,            5,             0,             2,            4,      36
37,       'ooo..',       21,         1,            5,             1,             2,            1,      9
38,       'assasda',     6,          0,            5,             0,             2,            2,      18
40,       'da',          1,          0,            5,             0,             2,            0,      0
42,       'kek..',       2,          0,            5,             0,             2,            0,      0
43,       'Hoppla',      4,          0,            5,             0,             2,            1,      9

För den uppmärksamma blir resultatet i 'AntalPosts', AntalPosts*Antal rader.

Vad har jag gjort fel? =/
Citera
2007-06-15, 11:03
  #2
Medlem
oGGos avatar
Citat:
Ursprungligen postat av oGGo
Tjena!
...
Vad har jag gjort fel? =/
Löste det själv nu, gjorde om hela sql frågan till en INNER JOIN version.

Fullständig lösning..

Kod:
"SELECT Forums.*, "&_
			"(SELECT Count(*) FROM Forumthreads WHERE Threadforumid = Forums.Forumid AND Threadcityid = 2) AS forumthreads, "&_
			
			"(SELECT Postdate FROM Forumposts "&_
				"INNER JOIN Forumthreads ON Forumposts.Postthreadid = Forumthreads.Threadid "&_
				"WHERE Threadforumid = Forums.Forumid AND Forumthreads.Threadcityid = 2 "&_
				"ORDER BY Postid DESC LIMIT 0,1) AS datum, "&_

			"(SELECT Postuserid FROM Forumposts "&_
				"INNER JOIN Forumthreads ON Forumposts.Postthreadid = Forumthreads.Threadid "&_
				"WHERE Threadforumid = Forums.Forumid AND Forumthreads.Threadcityid = 2 "&_
				"ORDER BY Postid DESC LIMIT 0,1) AS userid, "&_
			
			"(SELECT Count(*) FROM Forumposts "&_
				"INNER JOIN Forumthreads ON Forumposts.Postthreadid = Forumthreads.Threadid "&_
				"WHERE Forumthreads.Threadforumid = Forums.Forumid AND Forumthreads.Threadcityid = 2) AS forumposts "&_
			
			"FROM Forums "&_
			"ORDER BY Forumid ASC"
Citera
2007-06-15, 19:20
  #3
Medlem
nejmenkanskes avatar
Detta har inget direkt med din fråga att göra. Nu vet jag inte hur du har lagt upp din databas, men jag chansar. Om du inte sparar antalet poster i en tråd och för varje gång måste söka upp i databasen efter hur många poster tråden har så är detta väldigt tidskrävande. Det är möjligt att du redan sparar detta i en kolumn, men om du inte gör detta så bör du göra det. Det är betydligt mer effektivt. Med andra ord, skapa en kolumn i trådtabellen som beskriver hur många svar tråden har.
Citera
2007-06-18, 13:58
  #4
Medlem
oGGos avatar
Citat:
Ursprungligen postat av nejmenkanske
Detta har inget direkt med din fråga att göra. Nu vet jag inte hur du har lagt upp din databas, men jag chansar. Om du inte sparar antalet poster i en tråd och för varje gång måste söka upp i databasen efter hur många poster tråden har så är detta väldigt tidskrävande. Det är möjligt att du redan sparar detta i en kolumn, men om du inte gör detta så bör du göra det. Det är betydligt mer effektivt. Med andra ord, skapa en kolumn i trådtabellen som beskriver hur många svar tråden har.
Kommer lösa det så i ett senare skede.. för tillfället duger denna lösningen, men jag är med och införstådd på exakt vad du menar..

MVH
oGGo
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback