表 table,InfoID为消息ID,即转发后生成的ID号,TransID为转发消息ID,为消息在原来博主界面的ID号
InfoID TransID UserName
---------------------------------------
1000 2000 张三
2000 3000 李四
3000 4000 王五
4000 小刘
在java中写个mysqlSQL语句,然后得到下面的结果
小刘的微博->王五的微博->李四的微博->张三的微博 这样的转发关系,如何实现呢?
不胜感激
如何在java中实现sql递归查询,实现微博转发路径的表示,如以下表
答案:3 悬赏:80
解决时间 2021-11-16 02:08
- 提问者网友:清茶柒夏
- 2021-11-15 18:20
最佳答案
- 二级知识专家网友:风格单纯
- 2021-11-15 19:49
create table message(
InfoID int,
TransID int,
UserName varchar(20)
);
insert into message(InfoID,TransID,UserName) values(1000,2000,'张三');
insert into message(InfoID,TransID,UserName) values(2000,3000,'李四');
insert into message(InfoID,TransID,UserName) values(3000,4000,'王五');
insert into message(InfoID,UserName) values(4000,'小刘');
首先找到第一个发微博的人,怎么确定呢?因为他的TransID也就是转发消息ID 为NULL
select UserName from message where TransID is null
+----------+
| UserName |
+----------+
| 小刘 |
+----------+
取出第一个转发微博的姓名
select UserName from message where TransID in(
select InfoID from message where TransID is null)
+----------+
| UserName |
+----------+
| 王五 |
+----------+
取出第二个转发微博的姓名
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
+----------+
| UserName |
+----------+
| 李四 |
+----------+
取出第三个转发微博的姓名
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
)
+----------+
| UserName |
+----------+
| 张三 |
+----------+
然后把所有人连起来
select UserName from message where TransID is null
union
select UserName from message where TransID in(
select InfoID from message where TransID is null)
union
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
union
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
)
运行的结果:
+----------+
| UserName |
+----------+
| 小刘 |
| 王五 |
| 李四 |
| 张三 |
+----------+
以上代码就是给你一个思路, 最好写一个循环来查找,按照这个思路做
希望对你有帮助
InfoID int,
TransID int,
UserName varchar(20)
);
insert into message(InfoID,TransID,UserName) values(1000,2000,'张三');
insert into message(InfoID,TransID,UserName) values(2000,3000,'李四');
insert into message(InfoID,TransID,UserName) values(3000,4000,'王五');
insert into message(InfoID,UserName) values(4000,'小刘');
首先找到第一个发微博的人,怎么确定呢?因为他的TransID也就是转发消息ID 为NULL
select UserName from message where TransID is null
+----------+
| UserName |
+----------+
| 小刘 |
+----------+
取出第一个转发微博的姓名
select UserName from message where TransID in(
select InfoID from message where TransID is null)
+----------+
| UserName |
+----------+
| 王五 |
+----------+
取出第二个转发微博的姓名
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
+----------+
| UserName |
+----------+
| 李四 |
+----------+
取出第三个转发微博的姓名
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
)
+----------+
| UserName |
+----------+
| 张三 |
+----------+
然后把所有人连起来
select UserName from message where TransID is null
union
select UserName from message where TransID in(
select InfoID from message where TransID is null)
union
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
union
select UserName from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID in(
select InfoID from message where TransID is null)
)
)
运行的结果:
+----------+
| UserName |
+----------+
| 小刘 |
| 王五 |
| 李四 |
| 张三 |
+----------+
以上代码就是给你一个思路, 最好写一个循环来查找,按照这个思路做
希望对你有帮助
全部回答
- 1楼网友:时光挺欠揍
- 2021-11-15 20:06
mysql的话,好像要自己写个function才行啊。
我记得是这样的。
要不你自己写一个function,然后调用一下。
- 2楼网友:狠傷凤凰
- 2021-11-15 19:59
你好!
mysql的话,好像要自己写个function才行啊。
我记得是这样的。
要不你自己写一个function,然后调用一下。
如有疑问,请追问。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯