そのトピックから、CodeIgniterについて質問しました。代わりに、完全に生で実行することを考えました。
これは私の現在のクエリです。
SELECT `forums`.*,
Count(topics.id) threads,
Count(replies.id) replies,
`users`.`url` user_url,
`users`.`name` user_name,
`ranks`.`name` user_rank
FROM (`forums`)
LEFT JOIN `topics` ON `topics`.`f_id` = `forums`.`id`
LEFT JOIN `replies` ON `replies`.`t_id` = `topics`.`id`
LEFT JOIN `users` ON `users`.`id` = `topics`.`a_id`
LEFT JOIN `ranks` ON `users`.`status` = `ranks`.`id`
LEFT JOIN (
SELECT `topics`.`url` topic_url, `topics`.`name` topic_name
FROM `topics`
ORDER BY `created` DESC
LIMIT 1
) last_post ON `topics`.`f_id` = `forums`.`id`
GROUP BY `forums`.`id`
だから私がやろうとしているのは、すべてを1つの気の利いた行にまとめることです。「LastPostBy」以外はすべて機能しています。後でLEFT JOIN
追加したものを削除すると、最後の投稿ではなく最初の投稿が表示されます。
だから私の質問は; 私は今何を間違っているのですか?
また、おまけの質問ですが、PHPとMySQLに関しては、私よりも少し知識が豊富な友人と話をしました。彼は、すべてをデータベース、last_post、スレッド数に保存するように指示しました。返信します。
前もって感謝します。
アップデート
これがフォーラムの表です
CREATE TABLE IF NOT EXISTS `forums` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c_id` int(11) NOT NULL,
`url` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`desc` text NOT NULL,
PRIMARY KEY (`id`),
KEY `url` (`url`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
これがトピックテーブルです
CREATE TABLE IF NOT EXISTS `topics` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`f_id` int(11) NOT NULL,
`url` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`desc` varchar(255) NOT NULL,
`body` text NOT NULL,
`a_id` int(11) NOT NULL,
`created` int(11) NOT NULL,
`edited` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `head` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
また、最初に行ったように、マークダウン編集で表示方法を更新しようとしました。これがより魅力的であることを願っています。