【问题标题】:Having some trouble with a mysql query pulling data from multiple tables... logic questionmysql 查询从多个表中提取数据时遇到一些问题......逻辑问题
【发布时间】:2023-04-02 13:09:01
【问题描述】:

我会尽量保持简单和重点。基本上我有一个新闻提要和一个 cmets 部分。 cmets 部分有两层:响应和对响应的回复。对于给定的新闻帖子,基本上是这样的结构:

 -> comment

 ---> reply

 ---> reply

每条评论可以有多个回复。显然,这样做的错误方法是对每条评论进行 SQL 查询,以检查回复并列出它们。 EDIT 评论只有1层回复,即回复不能有回复。 - 谢谢约翰P

我对此类查询的问题:

我应该将 cmets 和回复保存在单独的表中并使用 JOIN,还是可以将回复和 cmets 保存在同一个表中并使用限定符来分隔类型?

我应该尝试使用查询对它们进行排序还是将所有数据拉入一个数组并以这种方式排序和显示?

我的表格目前如下:

ID (unique, auto increment)
NEWS_ID (ties the comment to a particular news post)
REPLY_ID (ties the comment to a parent comment if it is a reply to another comment)
USER_ID
BODY
PUBLISHED_DATE

任何比我聪明的人的建议将不胜感激!我仍处于完全理解 JOINS 和其他更高级别的 mysql 查询结构的早期阶段。 (即:我很擅长 mysql,但我正在学习 :)

【问题讨论】:

  • cmets/replies 是否仅嵌套到 1 级?意思是,回复可以有回复吗?
  • 感谢 JohnP 的回复:我们将 cmets 限制为 1 层回复(所以不,回复不能有回复)。

标签: php mysql join normalization


【解决方案1】:

既然你说回复是一层深度..

我会创建 cmets 1 表并有一个 comment_id 字段来表示所有权和一个 news_id 字段来添加与新闻项目的关系。这样您就可以简单地查询与news_id 匹配的所有cmets,并按comment_id 对其进行排序。然后一点点 PHP 数组魔术将为您提供 cmets/replies 的排序列表。

因此,看看您当前的表格,您就走在了正确的道路上。

【讨论】:

  • 非常感谢 JohnP!这很有意义。对于任何给定的问题,一旦找到或给出了一个非常简单的解决方案,我就会对它的明显程度感到震惊。非常感谢!
猜你喜欢
  • 2021-06-23
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多