2 回答
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。
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 是唯一的。
您不会返回太多需要分页的行...限制查询需要不同的方法。
- 2 回答
- 0 关注
- 117 浏览
添加回答
举报