2016-01-21 59 views
0

谈话我有4个表:SQL请求来选择由用户ID

  1. 对话
  2. conversations_users
  3. 消息
  4. 用户

的对话结构表是:

  • ID(主键)
  • 标题(会话标题)

的conversations_users结构表是:

  • ID(主键)
  • 的conversationId(对话ID,其中用户是in)
  • userID(与会话ID相关联的用户)

这些消息结构表是:

  • ID(主键)
  • 消息(该消息文本)
  • 的conversationId(对话ID,其中该消息是在)
  • senderID(用户ID谁发送的消息)
  • 日期消息的(时间戳)的

在使用者结构表是:

  • ID(主键)
  • 用户名

我想显示的用户,以便仅在对话,其中用户是所有的谈话(标题,最后的消息,和最后一个消息时戳)英寸

如何处理SQL请求?我想这会是这样:

SELECT c.title, m.message, m.date 
FROM conversation c 
INNER JOIN conversation_users cu 
ON ... 
INNER JOIN messages m 
ON ... 
INNER JOIN users u 
ON ... 
GROUP BY u.id 
+0

当用户ID将从何而来?这是自动增量还是这个外键? – Kiyarash

+0

有一张表“用户”,每个用户都有一个唯一的ID!我忘了提及。刚刚编辑主题:) – Xavier

回答

1
select usr.userID, 
     cvs.title, 
     msg.message, 
     times.date 
from conversations_users usr 
left join conversations cvs on usr.conversationID = cvs.id 
left join messages msg on usr.conversationID = msg.conversationID 
left join 
    (select usr.userID, 
     MAX(msg.date) as date 
    from conversations_users usr 
    left join messages msg on usr.conversationID = msg.conversationID 
    group by usr.userID) times on times.userID= usr.userID and times.date=msg.date 
+0

谢谢兄弟'! – Xavier