跪求聊天室存储过程

lts530597238 2008-10-19 03:44:05
有两个表
user表 字段:userid,username
message表 字段:message(消息内容),UserIdFrom(发消息用户id),UserIdTo(接收消息用户id)
现在我想写一个存储过程获得所有聊天记录,结果集包括字段有:消息内容、发消息人姓名,接收消息人姓名

我实在不知道怎么做,头上都快憋出犄角了!!!求众大侠帮忙
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 lts530597238 的帖子:]
有两个表
user表 字段:userid,username
message表 字段:message(消息内容),UserIdFrom(发消息用户id),UserIdTo(接收消息用户id)
现在我想写一个存储过程获得所有聊天记录,结果集包括字段有:消息内容、发消息人姓名,接收消息人姓名

我实在不知道怎么做,头上都快憋出犄角了!!!求众大侠帮忙
[/Quote]


select message,b.username,c.username from message a left join [user] b on a.useridfrom=b.userid
left join [user] c on a.useridto=c.userid
Andy-W 2008-10-19
  • 打赏
  • 举报
回复
Select 
a.[message] As [消息内容],
b.username As [发消息人姓名],
c.username As [接收消息人姓名]
From [message] As a
Inner Join [user] As b On b.userid=b.UserIdFrom
Inner Join [user] As c On c.userid=b.UserIdTo
百年树人 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 happyflystone 的回复:]
select b.message,a.username,c.username
from [message] b
left join [user] a on b.UserIdFrom = a.userid
left join [user] c on b.UserIdTo = c.userid
[/Quote]
-狙击手- 2008-10-19
  • 打赏
  • 举报
回复
set nocount on
if object_id('[user]')is not null drop table [user] --生成测试数据
go
create table [user](userid int,username varchar(10))
insert [user] select 1, '张三'
insert [user] select 2, '李四'
insert [user] select 3, '王五'
if object_id('message')is not null drop table message
go
create table message ( message varchar(100),UserIdFrom int ,UserIdTo int) --生成测试数据
insert message select '你好',1,3
insert message select '好的',3,1
insert message select '下午打球',2,1
insert message select '好的,球场见',1,2
if object_id('P_message') is not null drop proc P_message --生成存储过程
go



select b.message,a.username,c.username
from [message] b
left join [user] a on b.UserIdFrom = a.userid
left join [user] c on b.UserIdTo = c.userid
/*
message username username
------------------------------ ---------- ----------
你好 张三 王五
好的 王五 张三
下午打球 李四 张三
好的,球场见 张三 李四


*/

水族杰纶 2008-10-19
  • 打赏
  • 举报
回复
set nocount on
if object_id('[user]')is not null drop table [user] --生成测试数据
go
create table [user](userid int,username varchar(10))
insert [user] select 1, '张三'
insert [user] select 2, '李四'
insert [user] select 3, '王五'
if object_id('message')is not null drop table message
go
create table message ( message varchar(100),UserIdFrom int ,UserIdTo int) --生成测试数据
insert message select '你好',1,3
insert message select '好的',3,1
insert message select '下午打球',2,1
insert message select '好的,球场见',1,2
if object_id('P_message') is not null drop proc P_message --生成存储过程
go
create proc P_message
as
select t.message,t.username,u.username from
(select m.message,u.username,m.UserIdTo from [user] u inner join message m on u.userid=m.useridfrom) t
inner join [user] u
on t.useridto=u.userid
go
exec P_message --执行存储过程
/*--结果
message username username
---------------------------------------------------------------------------------------------------- ---------- ----------
你好 张三 王五
好的 王五 张三
下午打球 李四 张三
好的,球场见 张三 李四


*/
Ny-6000 2008-10-19
  • 打赏
  • 举报
回复

SELECT A.message , A.UserIdFrom, B.username AS UserIdTo
FROM (SELECT C.message , D.username AS UserIdFrom, D.userid FROM message C JOIN user D ON C.userid = D.UserIdFrom )
AS TMPtable A
JOIN user B
ON A.userid = B.UserIdTo



刚才少写了内容,不好意思了。

Ny-6000 2008-10-19
  • 打赏
  • 举报
回复
晕,这应该不复杂的吧?



SELECT A.message , A.username AS UserIdFrom, B.username AS UserIdTo
FROM (SELECT C.message , D.username AS UserIdFrom FROM message C JOIN user D ON C.userid = D.UserIdFrom )
AS TMPtable A
JOIN user B
ON A.userid = B.UserIdFrom


22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧