gpt4 book ai didi

php - PHP/MYSQL 中评论的最佳存储和检索实践

转载 作者:行者123 更新时间:2023-11-29 02:35:07 25 4
gpt4 key购买 nike

当涉及到我的数据库和查询设计时,我遇到了一些问题。这是我想要的(老实说,很像堆栈溢出)。:

  • 一个项目有很多帖子。
  • 一个帖子有很多评论。
  • 评论可以被标记、喜欢和不喜欢。
  • 评论不能有子评论。

表结构如下:

Items
-----
iid
desc
...

Posts
-----
pid
iid
uid
date
desc
...

Comments
-----
cid
pid
uid
date
desc
...

所有这一切的逻辑是:获取项目的所有帖子 -> 对于每个帖子,获取所有评论。最好在一个查询中完成这一切吗?是否最好执行一次查询以获取所有帖子,然后单独查询每个帖子的每组评论?

如果我执行一个查询,那么我可能会拥有一个 100 行的庞然大物,其中我将拥有大量重复数据。如果我为每个帖子分别调用,那么我将有太多的查询。建议?

最佳答案

我想您的系统将有 3 个不同的 View ,我会按如下方式构建它:

  1. 项目列表 - 显示项目描述和附加到该项目的帖子数。例如SELECT i.desc, ...., COUNT(p.pid) FROM items i LEFT JOIN posts p ON i.iid = p.iid GROUP BY i.iid ORDER BY i.date DESC
  2. 所选项目的帖子列表 - 显示每个帖子的帖子和评论数,例如 SELECT p.desc, ...., COUNT(c.cid) FROM posts p LEFT JOIN comments c ON p.pid = c.pid WHERE p.iid = $iid GROUP BY p.pid ORDER BY p.date DESC
  3. 一个显示帖子的帖子页面,然后在下方显示评论。此页面需要两个查询。收集帖子信息的查询,正好返回 1 个数据库行。然后查询以收集附加到此帖子的每个单独评论。例如。 SELECT p.desc, ... FROM posts p WHERE p.pid = $pid LIMIT 1SELECT c.desc, ... FROM comments c WHERE c.pid = $pid ORDER BY c.date DESC.您可以更改此处的顺序以模仿 stackOverflow 如何按最旧、投票等对数据进行排序。

我会说这是可扩展的模型,我总是建议编写精简的 MySQL 查询,只检索每个显示实体所需的信息。

为了模仿这个页面,我会使用下面的代码......

itemRs = mysql_query("SELECT i,iid, i.desc, ... FROM items i WHERE i.iid = $iid LIMIT 1");

// all posts relating to the item
postsRs = mysql_query("SELECT p.pid, p.desc, .... FROM posts p LEFT JOIN comments c ON p.pid = c.pid WHERE p.iid = $iid ORDER BY p.date DESC");

// all comments for all posts relating to the item
commentsRs = mysql_query("SELECT c.pid, c.cid, c.desc, .... FROM comments c INNER JOIN posts p ON p.pid = c.pid INNER JOIN items i ON p.iid = i.iid WHERE p.iid = $iid ORDER BY p.date DESC");

然后您需要创建一种方法来显示此数据。也许将所有这些功能封装到一个名为 Item 的 DAO(数据访问对象)中,在调用 display() 方法以您想要的格式显示数据之前检索所有这些必需的数据。

关于php - PHP/MYSQL 中评论的最佳存储和检索实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com