タイトルが少しでしたら申し訳ありません... くだらない。基本的に私は小さなフォーラムを書いており、複数のサブクエリを使用してスレッド数、投稿数、フォーラムの最後の投稿の日付を選択し、同時にフォーラムの情報を取得してメイン ページに表示しています。 !
私は物事を説明するのが苦手なので、これは私の質問です。
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 />';
}
(もちろん、正確にはそうではありませんが、説明のために...)
それがパフォーマンスにとって「悪い」かどうか、またはそれを行うためのより良い方法があるかどうか疑問に思っていましたか? 各フォーラムにかなりの数の投稿とスレッドがあると仮定します。
私は元々、フォーラム テーブル自体に「投稿」、「スレッド」、および「lastPost」列を格納していましたが、誰かが新しいスレッドまたは投稿を作成するたびに値をインクリメント (投稿 = 投稿 + 1) しようとしていました。私もこの考えを持っていて、それが良いかどうか疑問に思っていました. :P