带有会话列表

时间:2016-07-11 10:19:24

标签: sql-server whatsapp messages

早上好!

我开发了一个允许人们交换消息的Web应用程序。

我在Windows 2012 Server上使用SQL Server 2008和Classic ASP。

为简化起见,假设只有两个表:

tUsers
  Id INT IDENTITY(1,1)
  Username VARCHAR(20)

tMessages
  Id INT IDENTITY(1,1)
  UserIdFrom INT
  UserIdTo INT
  SentDate DATETIME
  Message VARCHAR(300)
  Read TINYINT

我的问题很简单,但我找不到特定于MS SQL的解决方案。

我需要编写一个查询,返回我和我聊过的其他用户之间的对话列表。

列表必须包含 UserId 用户名(不是我的,而是我与之交谈过的用户),并且必须按发送日期/时间顺序的顺序排列,并且必须包括消息(来自或来自我)没有回答(例如Whatsapp)。

我找到了很多解决方案,但是对于MySQL来说,转换到MS SQL是行不通的。这是我第一次需要SQL帮助,但我自己找不到解决方案。

有人能给我一个T-SQL查询的例子来解决我的问题???

对不起我的英语,我以前会说意大利语。

这是我在StackOverflow上的第二个问题。我希望我尊重规则。

提前致谢。

2 个答案:

答案 0 :(得分:0)

SELECT t2.Id,
       t2.Username,
       m.SentDate,
       m.Message
FROM tMessages m
INNER JOIN tUsers t1
    ON m.UserIdFrom = t1.Id
INNER JOIN tUsers t2
    ON m.UserIdTo = t2.Id
WHERE (t1.Username = 'danylele'   AND t2.Username = 'yourFriend') OR
      (t1.Username = 'yourFriend' AND t2.Username = 'danylele')
ORDER BY m.SentDate DESC

如果您想要用户ID而不是用户名,则可以使用此WHERE子句:

WHERE (t1.Id = 'yourId'   AND t2.Id = 'friendId') OR
      (t1.Id = 'friendId' AND t2.Username = 'yourId')

答案 1 :(得分:0)

使用H / T到@Tim你可以接受他的查询,并将其与相反的联合起来,以便从另一个人那里获取消息到

如果您希望检索所有*对话的列表,可以使用

等查询
DECLARE @myUserId INT = 1
SELECT DISTINCT Id, Username 
FROM
(
  SELECT t2.Id,
       t2.Username,
       m.SentDate,
       m.Message
  FROM tMessages m
  INNER JOIN tUsers t1
    ON m.UserIdFrom = t1.Id
  INNER JOIN tUsers t2
    ON m.UserIdTo = t2.Id
  WHERE t1.Id = @myUserId 
  UNION
  SELECT t2.Id,
       t2.Username,
       m.SentDate,
       m.Message
  FROM tMessages m
  INNER JOIN tUsers t1
    ON m.UserIdFrom = t1.Id
  INNER JOIN tUsers t2
    ON m.UserIdTo = t2.Id
  WHERE t2.Id = @myUserId
)
ORDER BY SentDate DESC 

如果您希望特定对话中的所有消息都使用:

DECLARE @myUserId INT = 1
DECLARE @friendUserId INT = 2
SELECT * FROM
(
  SELECT t2.Id,
       t2.Username,
       m.SentDate,
       m.Message
  FROM tMessages m
  INNER JOIN tUsers t1
    ON m.UserIdFrom = t1.Id
  INNER JOIN tUsers t2
    ON m.UserIdTo = t2.Id
  WHERE t1.Id = @myUserId AND t2.Id = @friendUserId   
  UNION
  SELECT t2.Id,
       t2.Username,
       m.SentDate,
       m.Message
  FROM tMessages m
  INNER JOIN tUsers t1
    ON m.UserIdFrom = t1.Id
  INNER JOIN tUsers t2
    ON m.UserIdTo = t2.Id
  WHERE t1.Id = @friendUserId AND t2.Id = @myUserId
)
ORDER BY SentDate DESC