获取特定用户的记录树列表

时间:2015-01-01 06:01:52

标签: sql sql-server treeview

我有这两个表:

表1(消息)

MessageID |用户ID |主题| TextM | FatherMessage | ....

表2(Tb_Registration)

UserID |用户名| ....


在TreeList中使用以下查询,我设置了DataKeyNames = MessageID和ParentDataKeyNames = FatherMessage,我得到了一个消息树以及所有用户的相关答案。 picture

SELECT Messages.Subject,
       Messages.FatherMessage,
       Messages.TextM,
       Messages.MessageID,
       Tb_Registration.Username
FROM   Messages
       INNER JOIN Tb_Registration
               ON Messages.UserID = Tb_Registration.UserID
ORDER  BY Messages.MessageID ASC 

我现在面临的挑战是完全相同,但对于特定用户而言,我无法弄清楚如何进行此类查询。我的意思是来自特定用户的FatherMessage以及与之关联的所有子消息。级别0上的所有消息(新消息)都在表中提交了FatherMessage = null。所有其他消息(答案)都具有父消息的MessageMes​​s的父消息。

以下是一些示例数据:

MessageID | UserID | Subject | TextM | FatherMessage |
    1       user1       X       some       null
    2       user2     null      text         1
    3       user3     null      text         1
    4       user4     null      text         2
    5       user4      y        text       null

上述(Username = user1)的预期输出为:

MessageID | UserID | Subject | TextM | FatherMessage |
    1       user1       X       some       null
     2      user2     null      text         1
      4     user4     null      text         2
     3      user3     null      text         1

一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

试试这个..

DECLARE @Messages TABLE(MessageID int,
                        UserID VARCHAR(100), 
                        Subject varchar(150), 
                        TextM varchar(250), 
                        FatherMessage int)
INSERt INtO @Messages
(MessageID ,UserID , Subject , TextM , FatherMessage )
VALUES
(1,'user1','X ','some  ',null),
(2,'user2','null','text',1),
(3,'user3','null','text',1),
(4,'user4','null ','text ',2),
(5,'user4',' y  ',' text',null)


    ;with cte(MessageID , UserID , Subject , TextM , FatherMessage) AS (
    select * from @Messages where UserID='user1'
    UNION all
    SELECT m.* FROM @Messages m INNEr JOIN cte ON m.FatherMessage=cte.MessageID
    )
    SELECT * FROM cte

<强>输出

    MessageID   UserID  Subject TextM   FatherMessage
--------------------------------------------------------
       1         user1     X    some    NULL
       2         user2    null  text    1
       3         user3    null  text    1
       4         user4    null  text    2