SQL - 需要一个查询来按收件人搜索邮件

时间:2012-03-29 18:34:32

标签: sql schema messaging

我有一个简单的消息架构,其中“线程”将2个或更多用户绑定到消息流。每条消息都属于一个线程。它就像短信或Facebook消息一样工作。

给定一个字符串(表示用户的名称或部分名称),我需要一个查询来查找匹配其中的所有线程:

  1. 当前用户(userID)是线程的成员
  2. 用户的名称或部分名称也是该主题的成员
  3. 以下是我的表格:

    MessageThreads:
    线程ID
    lastUpdated

    MessageThreadUsers:
    threadFK
    userFK

    用户
    用户ID
    USERFIRSTNAME
    USERLASTNAME
    userFullName

    此查询获取当前用户所属的所有线程:

    SELECT DISTINCT threadFK FROM MessageThreadUsers
    WHERE userFK = 'usr_developer'
    

    但是我如何将每个线程加入线程中所有用户(不包括当前用户)的名称或部分名称匹配?

1 个答案:

答案 0 :(得分:1)

这应该向您展示'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

这两次连接表,首先,我们连接到users表,只返回具有id为'usr_developer'的用户的线程集。然后我们再次针对users表连接结果线程,这次用户id不是usr_developer。最后,我们可以按名称过滤结果集。