webForumDet fria alternativet

MySQL: SUM() på en "temporär (AS)" kolumn går ej?

Databaser & SQL

4 svar · 474 visningar · startad av oGGo

Medlem sedan apr. 2003120 inlägg
Frågan#1

Tjena!
Försöker att köra SUM() på en kolumn jag precis skapat via AS men får då ett felmeddelande som lyder...

MySQL skrev:

Unknown column 'nummer' in 'field list'

Hur skall man gå till väga?

SELECT Forumthreads.*,
  (SELECT Count(*) FROM Forumposts WHERE Threadid = Forumposts.Postthreadid) AS nummer,
  SUM(nummer) AS AntalPosts
FROM Forumthreads
GROUP BY Threadforumid

Databasdesignen ser ut som följer:

[U][B]Forumthreads[/B][/U]
threadid, threadsubject, threadhits, threadsticky, threadforumid, threadlocked

[U][B]Forumposts[/B][/U]
postid, postthreadid, postdate, postlastedit, postip, postcontent, postsubject, postuserid
Medlem sedan apr. 2003120 inlägg
#2

Okej, jag löste det problemet men nu dök ett annat upp..

[B]Lösning[/B]
SUM(nummer) AS AntalPosts
ersattes med..
(SELECT SUM(nummer) FROM Forumthreads WHERE Threadforumid = 5 AND Threadcityid = 2) AS AntalPosts

Då dyker ett annat problem upp.
När jag summerar så tar den värdet som finns i kolumnen 'nummer' och adderar med sig själv så många gånger som det finns rader i tabellen. (9 rader * värdet i nummer)
Vad jag vill åstadkomma är ju att den tar det totala värdet från alla rader i 'nummer'.

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
Medlem sedan nov. 20014 054 inlägg
#3

Testa att bara köra denna del av sql-satsen i ex. phpmyadmin eller annat hjälpmedel

SELECT nummer FROM Forumthreads WHERE Threadforumid = 5 AND Threadcityid = 2

om den returnerar 9 av varje nummer, så bygg om den tills den returnerar rätt antal.

Medlem sedan apr. 2003120 inlägg
#4

Fredde Mannen skrev:

Testa att bara köra denna del av sql-satsen i ex. phpmyadmin eller annat hjälpmedel

SELECT nummer FROM Forumthreads WHERE Threadforumid = 5 AND Threadcityid = 2

om den returnerar 9 av varje nummer, så bygg om den tills den returnerar rätt antal.

Tack, men det blev lite fel där..
Vad jag vill åstadkomma är alltså summan av nummer dvs. 28.
Det spelar ingen roll att det läggs på varje thread då denna SQL-sats skall bakas in i en mer komplex en och köras med en LIMIT 0,1 senare.

Kort och gott vill jag att summan av kolumnen 'nummer' (28) skall hamna på varje rad 'AntalPosts'.

/oGGo

Medlem sedan apr. 2003120 inlägg
#5

Löste det själv nu, gjorde om hela sql frågan till en INNER JOIN version istället.

Fullständig lösning..

"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"
425 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
159 ms — hämta statistik (db)
138 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)