Есть 3 таблицы:
- Пользователи
- Отделы (хотя кажется, что это не обязательно для запроса, но...)
- Сообщения
Пользователи:
UID, DeptID, Name, Surname, Admin
U1 DeptA John Doe 0
U2 DeptB Jack Fisher 0
U3 DeptA Jill Smith 0
U4 DeptA Joan Green 1
U5 DeptC Jeff Jones 1
U6 DeptA Amanda Reed 0
......
Отделы:
DeptID, DeptName
DeptA Denver
DeptB Boston
DeptC Seattle
Сообщения:
Sender, Receiver, Message, CreatedDate, Seen
U1 U3 Msg1 20152310 0
U1 U4 Msg2 20152310 0
U4 U1 Msg3 20152310 0
U3 U4 Msg4 20152310 0
U1 U3 Msg5 20152310 0
U3 U1 Msg6 20152310 0
(Пользователи могут отправлять сообщения только другим пользователям в том же отделе)
с одним входным параметром, таким образом, UID
Мне нужно создать список со всеми пользователями одного и того же отдела (кроме входного UID) в качестве заголовков, поэтому в примере
U3 U4 U6
с их данными (имя, фамилия) для создания списка вкладок
а затем для каждого из указанных выше UID список с последними 20 сообщениями, в которых U1 участвует как отправитель, так и получатель
Чтобы заполнить боковую панель чата, вы можете увидеть здесь: http://www.keenthemes.com/preview/metronic/theme/admin_4/
нажав на правый верхний значок
Я пытался с этим ... но у меня много дубликатов, которые не знают, как удалить: возможно, перекрестное применение - неправильная команда ... :-(
SELECT u.UID,
u.PWD,
i.Sender,
I.MessageText
.....
FROM (
SELECT S.UID,
S.PWD
FROM dbo.Users u
JOIN dbo.Users u2 ON u.DeptID=u2.DeptID
WHERE u2.UID=@_UID
ORDER BY u.Admin DESC
) AS u
CROSS APPLY
(
SELECT TOP (20)
m.Sender,
m.Message,
m.CreatedDate,
m.Seen
FROM dbo.Messages m
WHERE m.Sender=@_UID
OR m.Receiver=@_UID
ORDER BY m.CreatedDate DESC
) m;
Можете подсказать, что не так?
Спасибо
Джо