按最新回复时间排列论坛帖子

2024-04-08

在你喊之前ORDER BY id,情况就大不相同了。

我被要求建立的论坛是一个留言板论坛,未注册的用户可以在其中回复和发帖。对帖子的回复缩进在被回复的帖子下方。当然,这都是无序列表中的。一个简短的例子:

  • 主帖
    • 回复帖子
      • 对回复的回复
    • 另一个回复main
  • 与回复无关的帖子

就像什么Nettuts+ http://net.tutsplus.com的评论系统是这样的。在数据库中,帖子包含所有明显的信息(id、消息正文、作者、时间...)和回复 ID。 Replyid 基本上表示此帖子的回复内容。如果replyid为0,则为主帖(普通论坛中的帖子的意思。)

这就是我显示这些帖子的方式:首先,我调用一个函数(我们称之为 showPosts),它有一个名为replyid 的可选参数;默认为 0。

在 showPosts 中,我抓取所有回复 ID 等于关联数组中数据库中的参数的帖子,并填充posts数组中的字段包含 showPosts 的结果,我将帖子的 id 传递给 showPosts。在 showPosts 的末尾,我返回该关联数组。如果这还不清楚,请看以下片段:

 function showPosts($postid = 0) {
        $query = query("SELECT * FROM posts WHERE replyid='$postid'");
        $r = array();
        $i = 0;
        while (@$row = $query->fetch_assoc()) {
            $r[$i] = $row;
            $r[$i]['posts'] = showPosts($row['id']);
            ++$i;
        }
        return $r;
    }

一切都工作得很好,就像预期的那样,但我被这个问题困扰了:当用户回复旧帖子时,我希望首先显示该帖子,就像您在论坛线程中一样。

我已经考虑过在数据库中创建一个名为lastChanged 的​​字段,每当用户发布新回复时,它都会沿着帖子链一直向上,并将每个lastChanged 值更改为发布时的值。然而,这似乎只是浪费内存,而且可能会浪费时间。我也想过将主线程与回复分开,但这会让事情变得更加复杂,而且我喜欢不区分线程和帖子的美妙之处,因为任何东西都可以是线程或一个帖子。

如您所知,数据库是 MySQL,后端是用 php 编写的(当然,使用 MySQLi 与 MySQL 交互。)

预先感谢,如果有任何不清楚的地方,我们深表歉意。

编辑:根据要求的数据库结构。

id      |  int(11)
title   |  varchar(100)
author  |  varchar(100)
body    |  text
replyid |  int(11)
time    |  datetime

鉴于我和 Zirak 之间原始问题中的评论,我提出以下答案。

他是对的——遍历整个树来查找最近评论的日期可能需要一段时间,因为系统中可以发生的嵌套级别数似乎没有限制。我知道这是大量重复的数据,但为什么不存储类似的东西main_post_id,它指的是根节点(主帖子)。这样你就可以ORDER BY max(time) WHERE main_post_id = 1.

如果它是论坛软件(因此我认为它也可能涉及诸如线程列表分页之类的事情),那么这将使生活变得更加容易,因为您可以在数据库查询级别而不是在 PHP 中执行排序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按最新回复时间排列论坛帖子 的相关文章

  • 我应该将标签存储在文本字段还是单独的表中?

    我有一个表 其中的行如下所示 id path tags 1 pictures pic1 jpg car bmw 3 pictures pic2 jpg cat animal pussy 4 pictures pic3 png gun 基本上
  • 此集合实例 Laravel 关系中不存在属性 [X]

    我在 Laravel 5 6 中使用了很多 Realtions 当我添加 phonebooks 时 我看到所有关系都工作正常 一切都很好 但是当我尝试在视图中显示它们时 我得到了属性在此集合上不存在的错误 这是关系代码 public fun
  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • 回显 HTML 并内置 PHP

    请帮助我使用 echo 与 HTML 和 PHP 使用数组范围将其转换为动态
  • 在 Laravel 5.4 中选择下拉列表的选定值

    我有一个名为 名称 的下拉列表 用户将在其中选择其中一个 提交后 如果出现一些错误 那么我想选择所选的名称 我在 laravel 5 4 中使用它 控制器 info DB table designation gt where status
  • 使用 imagettftext 字体时出现问题

    这是当我更改有效网站的环境时收到的错误消息 Warning imagettftext function imagettftext Could not find open font 首先我以为这是因为缺乏文件权限 但事实并非如此 我检查了路径
  • 创建用于存储高尔夫球成绩的可扩展数据库架构

    我正在尝试设计一个数据库来存储我所有的朋友和我的高尔夫球成绩 您可能知道 高尔夫得分由 18 洞的个人得分组成 我可以想到两种设计模式的方法 创建一个表 每个洞有一列 例如 h1 到 h18 该表具有引用其他表的 FK player id
  • PHP Imagick - “-量化透明”等效项

    是否有 PHP Imagick 等效项 quantize transparent 量化透明使用示例 http www imagemagick org Usage quantize color trans注意 在页面中搜索 量化透明 Quan
  • php_zip 在 php 5.3.5 中不存在

    我正在使用 PHPExcel 要求之一是我需要启用 php zip 如果您需要 PHPExcel 来处理 xlsx 或 ods 文件 您将需要 邮政编码扩展名 我正在使用 PHP v5 3 5 并在我的php ini文件中 我有以下几行 e
  • PHP shell_exec 使用 ssh 运行 shell 脚本

    我有一个 shell 脚本 使用 ssh 和密钥连接到另一台机器 因此它不需要用户名和密码 当我从命令行运行这个脚本时 它工作正常 但是当我从 php shell exec 运行这个脚本时 它不起作用 如果我与 PHP 建立 ssh 连接并
  • 自动解析 PHP,将 PHP 代码与 HTML 分离

    我正在开发一个大型 PHP 代码库 我想将 PHP 代码与 HTML 和 JavaScript 分开 我需要对 PHP 代码进行多次自动搜索和替换 对 HTML 进行不同的搜索和替换 对 JS 进行不同的自动搜索和替换 有没有一个好的解析器
  • 从边界框确定文本坐标 a 的正确方法是什么?

    鉴于调用的结果imagettfbbox https www php net manual en function imagettfbbox php 什么是正确的 像素完美的点提供给imagettftext https www php net
  • 我想使用 Sequelize 将 MySQL 中的对象数组存储在单个列中

    之前我正在寻找如何使用 Sequelize 在 MySQL 中插入对象数组 然后我找到了一种直接插入数组的解决方案 例如 1 2 在单列中 insert into TABLE NAME id marks VALUES 21 1 2 但我正在
  • 根据相同的 XML 模式 (XSD) 加速一批 XML 文件的 XML 模式验证

    我想加快根据同一个 XML 模式 XSD 验证一批 XML 文件的过程 唯一的限制是我处于 PHP 环境中 我当前的问题是 我想要验证的模式包括 2755 行的相当复杂的 xhtml 模式 http www w3 org 2002 08 x
  • PHP:检测USB设备

    我正在尝试使用 PHP 将用户名和密码存储到 USB 拇指驱动器上的文本文件中 因此 当用户返回使用 USB 密钥登录时 应该会打开一个弹出窗口 并提示输入用户名和密码 所以我的问题是如何使用 PHP 检测 USB 拇指驱动器 所以客户端或
  • 在 Woocommerce 商店页面中显示可变产品的默认变化价格

    I m wondering how I can display the product price on the shop page Right now my variable products are shown with their p
  • 使用外部硬盘写入和存储 mysql 数据库

    我已经设置了 mysql 数据库在我的 Mac 上使用 java 和 eclipse 运行 它运行得很好 但现在我将生成大约 43 亿行数据 这将占用大约 64GB 的数据 我存储了大量的密钥和加密值 我有一个 1TB 外部我想用作存储位置
  • 如何使用 php 创建谷歌双因素身份验证?

    我想在我的 PHP 项目中使用 Google 2FA 用户登录时需要输入6位2fa代码 您可以画出一些关于该朝哪个方向走的提示吗 步骤 1 创建长度为 16 个字符的唯一密码 PHPGangsta 为 Google Authenticato
  • 在订单项目视图中显示自定义产品数据

    我在添加到购物车时遇到问题 我有一个具有不同定制条件的产品可供选择 当客户选择特定选项时 它添加到购物车 当客户选择另一种选择并添加时 它显示为购物车中的第二件商品 这没关系 但付款后 订单在第 1 项和第 2 项下均显示自定义选项 但没有
  • MySQL REPLACE 在自动递增行中

    假设我有一个 MySQL 表 其中包含三列 id a and b和名为id is an AUTO INCREMENT场地 如果我将如下查询传递给 MySQL 它将正常工作 REPLACE INTO table id a b VALUES 1

随机推荐

  • AF网络。检查所有操作队列的下载进度

    我有一个使用 AFNetworking 制作的 iOS 应用程序 我有一个单例自定义 httpclient 子类 我用它来使用我的 api 并从服务器下载二进制文件 我需要下载大约 100 个文件 迭代我的 url 数组并为每个 url 创
  • 将多个散景 HTML 图嵌入到 Flask 中

    我在 bokeh 网站和 stack Overflow 上搜索了过去 3 个小时 但没有一个是我真正想要的 我已经生成了我的图 并将它们放在 html 文件中 我想要做的就是将绘图嵌入到仪表板中 形成下图白色区域中的多网格状结构 然而 仅添
  • 如何启用或禁用键盘返回键[重复]

    这个问题在这里已经有答案了 当我们在文本字段中输入字符时 它会启用返回键 但是在我们的需求中 当长度大于5时 我们需要启用返回键 但是现在只要我们输入字符 它就会启用返回键 我们是否需要自定义键盘或者是否有其他可用的解决方案 提前致谢 好吧
  • 如何编写正则表达式从字符串中提取数值?

    我有一根绳子str 9 0 hr or str 9 0 hr 在这种情况下我只想要整数值9 0 语言是 Ruby 1 9 2 I d use number str d d 或者 如果小于 1 0 的值需要前导 0 number str d
  • 光栅化 matplotlib 轴内容(但不包括框架、标签)

    在一篇文章中 我正在生成变形有限元网格图 并使用 matplotlib 的 polycollection 对其进行可视化 图像保存为 pdf 高密度网格会出现问题 这种简单的方法会导致文件太大且渲染过于密集而无法实用 对于这些网格 将每个元
  • 在 R 中使用具有不均匀长度变量的熔化/铸造

    我正在处理一个想要旋转的大型数据框 以便列中的变量成为顶部的行 我发现 reshape 包在这种情况下非常有用 除了强制转换函数默认为 fun aggregate length 之外 大概这是因为我是按 案例 执行这些操作 并且测量的变量数
  • 当返回类型为 Option[Error] 时处理快速失败

    我已经发布了很多关于 Scala 中的故障处理的问题 我真的感谢大家的回答 我理解在处理 Either 和 Scalaz 或 a 时的选择 以便理解 我还有另一个 最后一个 问题 当操作处理外部非功能世界 例如数据库 时 如何执行快速失败的
  • 在 SQL 数据库中保持 RSS 提要唯一的最佳实践

    我正在开发一个项目 该项目显示来自不同站点的 RSS 提要 我将它们保存在数据库中 我的程序每 3 小时获取一次并将它们插入到 SQL 数据库中 我希望提供者有独特的记录 不要显示重复的内容 但问题是一些提供商不提供 GUID 字段 而其他
  • 全局 $sce.trustAsResourceUrl()

    我怎样才能做这样的事情 sce trustAsResourceUrl URL HERE 在全球范围内 就像在主应用程序中一样config or run 函数 以便任何 iFrame img src 等具有URL HERE将工作 文档对此的解
  • 在rabbitmq配置spring boot中在AMQP中配置多个Vhost

    我正在实现一个项目 我必须在rabbitmq中的不同虚拟主机之间发送消息 使用 SimpleRoutingConnectionFactory 但得到 java lang IllegalStateException 无法确定查找键的目标 Co
  • 休眠:不想节省毫秒

    我遇到了一个小问题 我在网上没有找到合适的解决方案 因为我的问题对于搜索引擎来说有点棘手 有很多关于休眠节省毫秒的主题 但我的问题是别的 事实上 我有一个数据库 它保存我的日期 如下所示 2014 03 20 10 58 09 I used
  • 如何使用 cartopy 添加点特征形状文件以进行地图绘制

    我有两个形状文件 一个是点要素形状文件 名为 point shp 另一个是名为 polygon shp 的多边形形状文件 我想使用 cartopy 添加到地图中 我设法添加 polygon shp 但添加 point shp 失败 这是我的
  • android gradle MonkeyTalk 构建问题

    我正在使用 MonkeyTalk 来进行写入测试这个演示 https github com georgepapas android gradle monkey talk demo 我正在使用 AndroidAnnotations 2 7 1
  • gridview 中 nvarchar 附近的语法不正确

    我在更新 gridview 的列时遇到问题 当我尝试更新该字段时出现此错误 nvarchar 附近的语法不正确 必须声明标量变量 pid 这是我的一段代码
  • 使用下拉列表在 Plotly 中交互式过滤数据表

    我正在尝试制作一个交互式表格 其中通过从下拉列表中选择一个值来更改表格的值 这应该只在 Plotly 而不是 Dash 中完成 因为我需要与其他用户共享文件 例如 如果我选择通道 1 那么表格应该是 Date A item B item C
  • 以编程方式切换 UIAlert 控制器

    我正在快速创建一个注册对话框 其中包含 3 个文本字段和一个开关 并且我成功添加了三个文本字段和两个警报 下面的代码显示了相同的内容 let alertController UIAlertController title Register
  • Mendeley API - 如何使用 JavaScript SDK - 隐式流身份验证

    我希望您不会介意我提出问题 因为我不是程序员 需要 傻瓜式 解释 虽然我可以使用基本的 JavaScript 但我从未使用过 API 这就是我想做的 我在硬盘上制作了一个 HTML 页面 我最终希望将其与 PhoneGap 之类的东西打包到
  • 在 iCarouselTypeRotary 视图中隐藏背面图像

    我已将图像设置为轮播 https github com nicklockwood iCarousel 当我滚动轮播时 它会显示正面和背面的图像 我不想在后面显示图像 请帮忙 谢谢 您应该实现委托 CGFloat carousel iCaro
  • HTML 输入值更改

    我有一个 PHP 更新页面 其中显示一个包含数据库中的值的文本字段 就是这样 并且正在工作
  • 按最新回复时间排列论坛帖子

    在你喊之前ORDER BY id 情况就大不相同了 我被要求建立的论坛是一个留言板论坛 未注册的用户可以在其中回复和发帖 对帖子的回复缩进在被回复的帖子下方 当然 这都是无序列表中的 一个简短的例子 主帖 回复帖子 对回复的回复 另一个回复