我有一个论坛帖子表,链接到评论表
我想通过他们的最新评论来命令我的查询,并在该
之前出现一个新的主题目前,新线程最后出现
理想情况下,我需要新的线程,没有任何评论出现在它们之上,而不是在带有注释的帖子之后命令?如果这是有道理的
这张图应该解释
订单应该是:
这是我的查询
public function getThreads($limit = 30)
{
return ForumThread::select(DB::raw('forum_threads.*, count(*) as count'))
->where('cat_id', $this->id)
->where('published', 1)
->join('comments', 'comments.thread_id', '=', 'forum_threads.id', 'left outer')
->orderBy('pinned', '1')
->orderBy('count', 'desc')
->orderBy('comments.created_at', 'desc')
->groupBy('forum_threads.id')
->paginate($limit);
}
试图解释我能做的最好的事情
答案 0 :(得分:0)
您必须创建一个条件列,其值为更新,线程创建日期或最新评论创建日期。
这样的事情:
IF(forum_threads.created_at > comments.created_at, forum_threads.created_at, comments.created_at) as last_activity_at
最好是将一个帖子的第一个帖子作为附加到Comment
的{{1}}。所以每个帖子至少会有一条评论。只需从评论计数中减去一个即可计算“回复”的数量。这将使您的数据库结构更清晰,并且不会在线程和注释表中复制列。