我有一个简单的消息架构,其中“线程”将2个或更多用户绑定到消息流。每条消息都属于一个线程。它就像短信或Facebook消息一样工作。
给定一个字符串(表示用户的名称或部分名称),我需要一个查询来查找匹配其中的所有线程:
以下是我的表格:
MessageThreads:
线程ID
lastUpdated
MessageThreadUsers:
threadFK
userFK
用户
用户ID
USERFIRSTNAME
USERLASTNAME
userFullName
此查询获取当前用户所属的所有线程:
SELECT DISTINCT threadFK FROM MessageThreadUsers
WHERE userFK = 'usr_developer'
但是我如何将每个线程加入线程中所有用户(不包括当前用户)的名称或部分名称匹配?
答案 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。最后,我们可以按名称过滤结果集。