我正在開發一個PHP論壇。 本論壇使用四個數據庫表:論壇,帖子,帖子,用戶。孫子表的MySQL計數返回不同的結果
在我的着陸頁上,我列出了所有論壇,以及最新線程列表(通過連接和內部連接實現),總體THAS(簡單計數子查詢)和總帖子。
我有一個合理大小的查詢,返回以上所有內容,並且一切工作都很好 - 除了總帖子。
主查詢是這樣的:
select f.id as forum_id,
f.name as forum_name,
f.description,
t.forum_id,
#this subquery counts total threads in each forum
(select count(t.forum_id)
from thread t
where t.forum_id = f.id
) as total_threads,
#this query counts total posts for each forum
(SELECT COUNT(p.id)
FROM post p
WHERE p.thread_id = t.id
AND t.forum_id = f.id
GROUP BY f.id) as total_posts,
t.id as thread_id,
t.name as thread_name,
t.forum_id as parent_forum,
t.user_id,
t.date_created,
u.id as user_id,
u.username
from forum f
# this join finds all latest threads of each forum
join
(select forum_id, max(date_created) as latest
from thread
group by forum_id) as d on d.forum_id = f.id
#and this inner join grabs the rest of the thread table for each latest thread
inner join thread as t
on d.forum_id = t.forum_id
and d.latest = t.date_created
join user as u on t.user_id = u.id
所以,如果你將你的注意力總員額子查詢以上 你會發現htat我指望所有職位,他們的線程ID =的ID每個線程然後=每個論壇的ID,如果我單獨使用這個查詢(幷包括主查詢中其他地方使用的表別名)它完美的作品。但是,當用於主查詢的爭用中,並且在別處提供表別名時,它只返回第一個線程p/forum的計數。
如果我嘗試在子查詢中聲明表別名,它將返回多於一行已被返回的錯誤。
爲什麼關於查詢內容的差異以及爲什麼只有第一個線程在主查詢中用作計算字段時才被計算?