我有一个论坛主题表,链接到评论表
我想按他们的最新评论对我的查询进行排序,并在其之前出现一个新线程
目前,新主题最后出现
理想情况下,我需要没有评论的新线程出现在它们之上,而不是在有评论的线程之后排序?如果这有道理的话
这张图应该能解释
顺序应该是:
- 第五个线程(因为最后创建)
- 第三个线程(应该是第二个,因为它在第五个线程之前有评论)
- 第四个线程
- 第二个线程
- 第一个线程
这是我的查询
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);
}
尽我所能地解释
最佳答案
您必须创建一个条件列,其中包含更新内容、线程创建日期或最新评论创建日期的值。
类似这样的事情:
IF(forum_threads.created_at > comments.created_at, forum_threads.created_at, comments.created_at) as last_activity_at
更好的办法是让线程的第一篇文章成为自己的评论
,并附加到线程
。所以每个帖子至少有 1 条评论。只需将评论数减一即可计算“回复”数。这将使您的数据库结构更清晰,并且不会在线程和评论表中复制列。
关于php - Laravel 新线程出现在碰撞线程之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39690172/