为了账号安全,请及时绑定邮箱和手机立即绑定

PHP MySQL - 获取一个用户撰写的所有帖子的评论计数

PHP MySQL - 获取一个用户撰写的所有帖子的评论计数

PHP
慕虎7371278 2023-10-15 15:27:37
我的目标是获取特定用户所有帖子的“待处理”和“已批准”评论总数。评论表有一个“待处理”或“已批准”状态列。作为记录,comments 表中的 page_id 映射到 posts 表中的 id。我开始写下面的声明 - 但我想我已经把它放回到前面了: $sql = 'SELECT * FROM posts JOIN comments on posts.id = comments.page_id WHERE author = posts.author'; $stmt = $pdo->prepare($sql); $stmt->execute(); $results = $stmt->fetch();为了使表结构可见,下面是表列。评论表 帖子表 用户表我有一个将用户id与帖子关联起来的外键user_id。我将继续尝试这样做 - 但是 - 希望获得一些关于如何实现这项工作的指导。编辑:我有一个供用户使用的管理面板。我想创建一个已批准评论表,其中已批准评论计数位于顶部,以及一个待处理评论表,其中待处理评论计数位于顶部。每个表格中都有一个按钮可以批准或取消批准评论 - 但仅限于他们的帖子。这是我如何针对所有评论执行此操作的图片。
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

SUM使用and似乎是一个非常简单的查询CASE


SELECT

  COALESCE(SUM(CASE WHEN c.status = 'approved' THEN 1 ELSE 0 END), 0) AS approvedCount,

  COALESCE(SUM(CASE WHEN c.status = 'pending' THEN 1 ELSE 0 END), 0) AS pendingCount

FROM comments c

INNER JOIN posts p

  ON c.page_id = p.id

WHERE p.user_id = :user_id

该查询的主要作用是将所有行comments与status = 'approved'另一个status = 'pending'单独的计数相加。


当您要查找的记录没有匹配记录时,这些COALESCE功能可以满足您的需求。user_id如果不使用它们,结果将null不是0。


查看完整回答
反对 回复 2023-10-15
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

对于填充每个页面的问题的第一部分,您可以通过在包含两个表的内部联接上使用“SELECT * FROM”从 POSTS 检索 ID 并从 COMMENTS 检索 ID。在这种情况下,将返回 POSTS 和 COMMENTS 中具有相同名称(id、img)的列,并且结果将不明确,即在 PHP 代码中,当您请求 $row->id 时,它是 POSTS.ID 还是评论.ID?


您需要 COMMENTS.ID 来更新 COMMENTS 中的状态。您可以将“COMMENTS.ID 重命名为 COMMENT_ID”,或者仅从 COMMENTS 中进行选择,因为您知道返回的“ID”将是 COMMENT.ID


由于您只需要结果中来自 COMMENTS 的行,因此我只会从 COMMENTS 中进行选择,并使用子查询通过 POSTS 而不是联接来约束它,并且还进一步将 SELECT 限制为您的结果明确需要的列列表,以便您不必为返回不需要的列付费,例如


SELECT C.ID, C.NAME, C.CONTENT, C.VOTES C.STATUS /* but you know that STATUS already, heheh */

FROM COMMENTS C WHERE 

  C.STATUS = :STATUS AND

  C.PAGE_ID IN ( SELECT P.ID FROM POSTS P WHERE P.USER_ID = :USER )

有用的索引:

  • 对 STATUS、PAGE_ID 的评论

  • USER_ID 上的帖子

假设:

  • COMMENTS.PAGE_ID --> POSTS.ID 外键依赖。

  • POSTS.ID 和 COMMENTS.ID 是唯一的。

  • 您不会返回太多需要分页的行...限制查询需要不同的方法。


查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信