SQL - нужен запрос, чтобы получить все отдельные потоки сообщений с заданным идентификатором пользователя. - PullRequest
0 голосов
/ 22 марта 2012

У меня есть простая схема обмена сообщениями, где каждое сообщение имеет senderFK и receientFK, каждое сопоставление с записью пользователя. Для текущего пользователя мне нужно получить все отдельные темы. Отдельный поток - это senderFK или receiveientFK для пользователя, который отправил или получил сообщение.

Так, например:

Этот запрос получает всех пользователей, отправивших сообщение текущему пользователю:

SELECT DISTINCT senderFK AS threadID FROM Messages
WHERE recipientFK = 'usr_developer'

Этот запрос получает всех пользователей, которые получили сообщение от текущего пользователя:

SELECT DISTINCT recipientFK AS threadID FROM Messages
WHERE senderFK = 'usr_developer'

Как мне объединить эти запросы в одну таблицу, в которой для каждого пользователя есть отдельная строка и один столбец (threadID)?

Ответы [ 3 ]

3 голосов
/ 22 марта 2012

Примерно так должно работать:

SELECT recipientFK as UserId, senderFK as ThreadID
 FROM Messages
UNION
SELECT senderFK as UserID, recipientFK AS threadID
 FROM Messages

Этот метод исключает пользовательские фильтры на основе вашего комментария ...a distinct row for each user ...

2 голосов
/ 22 марта 2012
SELECT senderFK AS threadID 
FROM Messages
WHERE recipientFK = 'usr_developer'

UNION

SELECT recipientFK AS threadID 
FROM Messages
WHERE senderFK = 'usr_developer'

Обратите внимание, что вам больше не нужно DISTINCT, поскольку UNION отфильтровывает любые дубликаты.

1 голос
/ 22 марта 2012

Если SQL Server, вы можете сделать что-то вроде следующего:

select distinct case when senderFK = 'usr_developer' then recipientFK else senderFK end ThreadID
from Messages
where 'usr_developer' in (senderFK, recipientFK)

Точно так же вы можете изменить предложение WHERE, если вы предпочитаете / оно превосходит:

select distinct case when senderFK = 'usr_developer' then recipientFK else senderFK end ThreadID
from Messages
where senderFK = 'usr_developer' 
   or recipientFK = 'usr_developer'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...