SQL - нужен запрос для поиска сообщений по получателю - PullRequest
0 голосов
/ 29 марта 2012

У меня есть простая схема сообщений, где «поток» связывает 2 или более пользователей с потоком сообщений.Каждое сообщение принадлежит одной теме.Он работает так же, как SMS-сообщения или сообщения Facebook.

Учитывая строку (представляющую имя или частичное имя пользователя), мне нужен запрос, который найдет все темы, которые соответствуют:

  1. текущий пользователь (userID) является участником потока
  2. имя или частичное имя пользователя также является членом потока

Вот мои таблицы:

MessageThreads:
threadID
lastUpdated

MessageThreadUsers:
threadFK
userFK

Users
userID
userFirstName
userLastName
userFullName

Этот запрос возвращает все потоки, к которым принадлежит текущий пользователь:

SELECT DISTINCT threadFK FROM MessageThreadUsers
WHERE userFK = 'usr_developer'

Но как бы я присоединился к каждому потоку со всеми пользователями в потоке (не включая текущего пользователя), которые совпадают по имени или частичному имени?

1 Ответ

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

Это должно показать вам других пользователей всех потоков, частью которых является ключ 'usr_developer'.

    SELECT MT.ThreadId, U.userID, U.userFullName
      FROM MessageThreads MT 

INNER JOIN MessageThreadUsers MTCU on (MTCU.threadFK = MT.threadID)
INNER JOIN Users CU on (MTCU.userFK = CU.userID and CU.userID = 'usr_developer')

INNER JOIN MessageThreadUsers MTU on (MTU.threadFK = MT.threadID)
INNER JOIN Users U on (MTU.userFK = U.userID and U.userID <> 'usr_developer') 

     WHERE U.UserFullName like '%John%' -- Do your filters here

Это объединяет таблицы дважды, во-первых, мы присоединяемся к таблице пользователей только для извлеченияобратно набор потоков, которые имеют пользователя с идентификатором «usr_developer».Затем мы снова присоединяем полученные потоки к таблице пользователей, на этот раз, где идентификатор пользователя не usr_developer.Наконец, мы можем отфильтровать набор результатов по имени.

...