请教一条sql语句,希望大侠们进来看看。

njstalk njstalk 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
有如下一个表结构,pid 是帖子id,tid 是主题id,parentid是父id。
当layer=0时 表示这一个是主题的第1楼帖子,就是楼主发的;
当layer=1时 表示这个回帖是回个这个主题的,我们算做是回给楼主的;
当layer=2时 表示这个回帖是回个parentid所指代的帖子的人的。
tablename
pid tid parentid layer poster posterid
4734182 363580 4734182 0 user01 34550
4734192 363580 4734192 1 user02 40131
4734195 363580 4734195 1 user03 22843
4734198 363580 4734195 2 user01 34550
4734203 363580 4734203 1 user04 38269

现在有个题目,就是统计每个被哪些用户回了多少次贴。
形成如下的表格(示例):

用户名 回复人 次数
user1 user2 4
user1 user3 5
user2 user1 10
...
请问应该怎样写sql语句呢?
麻烦大侠们帮帮忙啊!
我现在想到的方法大概是这样的:
1、 select user2 from tablename where layer=1 and tid in(select tid from tablename where lager=0 and posterid = 'user1')
找到user2对user1 发起的主题的直接回复。
2、select user2 from tablename where layer=2 and tid in(select tid from tablename where lager=1 and posterid = 'user1')
找到user2对user1 回帖的回复。
然后再把两个连起来。然后再重复每个用户,这个方法很笨,而且数据量大的时候相当慢,如果用户数量较多,超过1万,用什么方法比较快捷呢?
万分感谢!
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
njstalk
MS-SQL Server 34,876 成员 254,635 内容