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

如何使用 join 来选择返回消息行的类似计数

如何使用 join 来选择返回消息行的类似计数

PHP
湖上湖 2023-06-24 15:40:27
语境当我尝试返回消息值行并查找存储在不同表中的相应的类似计数时,我无法理解 JOIN 语句的应用程序。我尝试从中提取的第一个表包含我想要的消息:SELECT forums.forum_id, forums.message FROM forums LIMIT 3然后,我尝试使用结果forum_id值插入到第二个查询中,该查询获得类似的计数:SELECT COUNT(forumvotes.forum_id) AS voteCount FROM forumvotes JOIN forums ON forumvotes.forum_id = forums.forum_id  WHERE forumvotes.forum_id = [insert returned forum ids here]问题我相信我可以通过使用联接将这两个查询合并为一个,但我不确定如何做到这一点。当我像这样组合两者时,新voteCount列返回已插入的所有论坛投票的计数,而不仅仅是我想要的三个特定消息的喜欢计数:SELECT forums.forum_id, forums.message,  (SELECT COUNT(forumvotes.forum_id) AS voteCount FROM forumvotes JOIN forums ON forumvotes.forum_id = forums.forum_id WHERE forumvotes.forum_id = forums.forum_id) AS voteCount  FROM forums LIMIT 3因此,查询返回三行,每行都包含单独的消息(这很好),但它们也返回相同的voteCount值 13,因为数据库中已插入 13 个点赞,但每行的voteCount值只能是一个或两个,因为每条消息只有一两个点赞。如何将这两个查询合并为一个?如果有任何困惑请告诉我。
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您需要将子查询与外部查询正确关联。问题是您对外部和内部使用相同的别名,因此子句中的条件WHERE实际上并没有过滤任何内容。您应该使用表别名来避免此问题。


forum无论如何,没有必要在子查询中使用该表。您可以将其写为:


SELECT 

    f.forum_id, 

    f.message, 

    (

        SELECT COUNT(*) 

        FROM forumvotes fv 

        WHERE fv.forum_id = f.forum_id

    ) AS voteCount 

FROM forums f

ORDER BY ??

LIMIT 3

ORDER BY如果您希望结果在连续执行中保持一致,您还需要一个子句。


查看完整回答
反对 回复 2023-06-24
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

根据您的描述,您可能希望在此处执行“IN”子查询。

SELECT COUNT(forumvotes.forum_id) AS voteCount FROM forumvotes 
WHERE forumvotes.forum_id IN (SELECT forums.forum_id, forums.message FROM forums LIMIT 3)

具体来说,这将只返回前三个论坛行的 id,并将它们与一些论坛信息连接起来


查看完整回答
反对 回复 2023-06-24
?
呼如林

TA贡献1798条经验 获得超3个赞

我将论坛表设置为包含每个的JOIN嵌套查询COUNT, GROUP BYforum_id


SELECT f.forum_id, f.message, a.voteCount

  FROM forums f

  JOIN (SELECT COUNT(forumvotes.forum_id) AS voteCount, forumvotes.forum_id

          FROM forumvotes

         GROUP BY forumvotes.forum_id) a ON f.forum_id = a.forum_id


查看完整回答
反对 回复 2023-06-24
  • 3 回答
  • 0 关注
  • 109 浏览

添加回答

举报

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