【发布时间】:2017-02-25 17:47:12
【问题描述】:
编辑:我已将其放在 PHP 和 MySQL 类别中,因为我相信可能有一种方法可以使用多个查询来做到这一点,并使用 PHP 将它们联系在一起。我宁愿不这样做……但归根结底,解决方案就是解决方案……
希望这对某人来说很容易思考,但我肯定被困在这里!在我的网站上,我允许用户发布提要/消息,并且他们可以根据需要随时切换会员资格。我想根据他们发布每个提要时的成员身份来运行一些统计数据,而不仅仅是他们当前的成员身份。例如,我想查看每个会员发布了多少订阅源。现在,我可以运行计数并加入用户、提要和会员表,但这会根据每个用户当前的会员资格计算每个用户的每个提要,这不一定是他们发布时的会员资格。我希望这是有道理的。
由于我们的数据库中已经有许多提要,我无法在提要表中添加一列来显示发布用户的会员类型。这是我的表格(缩写)的样子,看看是否有人对如何执行此操作有疑问:
用户表
id username membershipid
1 John Doe 1
成员表
id membershipname
1 Membership #1
2 Membership #2
3 Membership #3
会员历史记录表
id membershipsid usersid unix_timestamp
1 1 1 1476635544.33
2 2 1 1476641890.11
3 3 1 1476642124.2
4 1 1 1476642161.51
Feed 表
id unix_timestamp usersid
1 1476641716.809361 1
2 1476641783.866863 1
3 1476641822.779324 1
4 1476641904.066237 1
5 1476641973.767174 1
6 1476642182.821472 1
使用 unix_timestamps 很难快速查看...但我想要一个解决方案来提供这个:
按成员资格表的订阅源计数
membershipid feedcount
1 4
2 2
3 0
到目前为止,我已经尝试了很多东西,但它们最终都提供了用户当前的会员资格......例如:
SELECT
a.MembershipName MembershipName,
COUNT(*) Feeds
FROM (SELECT
m.membership_name MembershipName
FROM feeds f
JOIN users u ON f.usersid = u.id
JOIN memberships m ON u.membership_id = m.id
GROUP BY f.id
ORDER BY f.unix_timestamp DESC) a
GROUP BY a.MembershipName
ORDER BY a.MembershipName
但这对会员历史表没有任何作用,所以我的输出表是:
按成员资格表的订阅源计数
membershipid feedcount
1 6
2 0
3 0
这是错误的,因为它应该是 1->4, 2->2 & 3->0,如上表所示。任何人的任何想法?
【问题讨论】:
-
与您的情况类似:stackoverflow.com/questions/4070476/… 他们的
classification表将是您的会员历史表,他们的closed_cases表将是您的提要表 -
这是一个非常相似的问题......我将看看我是否可以复制它。我遇到的一个问题是,他的解决方案只能通过添加一个带有“结束时间”的新列来解决。我希望我的结束时间成为 members_history 表中该用户的下一个值