对不起,如果标题有点......蹩脚。基本上我在写一个小论坛,使用多个子查询来选择论坛的线程数,帖子数,最后一次帖子的日期,同时抓取论坛的信息显示在主页上!
这是我的疑问,因为我不擅长解释事情:
SELECT `f`.*,
(SELECT COUNT(`id`)
FROM `forum_threads`
WHERE `forumId1` = `f`.`id1`
AND `forumId2` = `f`.`id2`) AS `threadCount`,
(SELECT COUNT(`id`)
FROM `forum_posts`
WHERE `forumId1` = `f`.`id1`
AND `forumId2` = `f`.`id2`) AS `postCount`,
(SELECT `date`
FROM `forum_posts`
WHERE `forumId1` = `f`.`id1`
AND `forumId2` = `f`.`id2`
ORDER BY `date` DESC LIMIT 1) AS `lastPostDate`
FROM `forum_forums` AS `f`
ORDER BY `f`.`position` ASC, `f`.`id1` ASC;
并且正在使用一般的 foreach 循环来显示结果:
foreach($forums AS $forum) {
echo $forum->name .'<br />';
echo $forum->threadCount .'<br />';
echo $forum->postCount .'<br />';
echo $forum->lastPostDate .'<br />';
}
(当然不完全一样,但为了解释......)
现在我想知道这是否对性能“不利”,或者是否有更好的方法?假设每个论坛中有很多帖子和主题。
我最初在论坛表本身中存储“posts”、“threads”和“lastPost”列,并且每次有人创建新线程或帖子时都会增加(posts = posts + 1)值。虽然我也有这个想法,并且想知道它是否有什么好处。:P