是否可以通过一个查询获取此信息?

时间:2013-01-02 05:03:43

标签: database database-design

让我们说我正在编写一个简单的论坛并拥有表格:'用户','论坛','forum_subscribers'和'帖子'。 'groups','posts'和'forum_subscribers'将'user'作为外键引用。

我想创建一个名为'user_profile'的视图,其中包含

  • 用户订阅的论坛数量,
  • 他们在forum_x中发布的帖子数量和
  • 所有论坛中的帖子总数(您可以将某个论坛视为论坛或类别)。

如何使用count()函数执行此操作?

1 个答案:

答案 0 :(得分:0)

我认为你不能比3个工会做得更好(也许最后2个可以和COUNT DISTINCT结合使用)。我在下面对你的表结构做了很多假设,但我认为应该很容易将它转换成你的结构。

CREATE VIEW myView AS
SELECT user.id, CAST(posts.forum_id AS VARCHAR(20)) AS forum_id, COUNT(posts.id)
FROM user
  JOIN posts ON user.id = posts.user_id
GROUP BY user.id, posts.forum_id
    UNION
SELECT user.id, 'All forums', COUNT(posts.id)
FROM user
  JOIN posts ON user.id = posts.user_id
GROUP BY user.id
    UNION
SELECT user.id, 'Subscription count', COUNT(fs.forum_id)
FROM user
  JOIN forum_subscribers fs ON user.id = fs.user_id
GROUP BY user.id