php - Laravel 新线程出现在碰撞线程之前

标签 php mysql laravel

我有一个论坛主题表,链接到评论表

我想按他们的最新评论对我的查询进行排序,并在其之前出现一个新线程

目前,新主题最后出现

理想情况下,我需要没有评论的新线程出现在它们之上,而不是在有评论的线程之后排序?如果这有道理的话

这张图应该能解释

enter image description here

顺序应该是:

  • 第五个线程(因为最后创建)
  • 第三个线程(应该是第二个,因为它在第五个线程之前有评论)
  • 第四个线程
  • 第二个线程
  • 第一个线程

这是我的查询

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/

相关文章:

CodeIgniter - 在非对象上调用成员函数 model()

mysql - 在单个表中使用多个列的复杂查询

PHP 图像显示不正确

php - Laravel Cashier 10 - 尝试显示 Stripe 元素时出错

php - 表单在 Laravel 5 中显示为纯文本

mysql - 最佳数据库模式结构

php - Sylius:如何在自定义 ProductRepository 中注入(inject)(请求)参数?

php - 文本魔术短信 API 在 Godaddy 共享主机上出现错误

mysql - 向 mySQL GROUP_CONCAT 语句添加内部连接

php - 如何在mysql数据库中保存没有html标签的输入?