我正在尝试创建一个facebook风格的消息系统,两个或更多用户可以进行对话。在此消息传递系统中,用户应该能够离开对话,而不会为其他参与者删除对话。
为了做到这一点,我制作了一组这样的表:
User-table
+---------+----------+
| user_id | username |
+---------+----------+
| 1 | john |
| 2 | marc |
| 3 | vince |
+---------+----------+
Conversation-table
+-----------------+-------------------+---------------+
| conversation_id | newest_message_id | message_count |
+-----------------+-------------------+---------------+
| 1 | 7 | 7 |
| 2 | 13 | 6 |
| 3 | 56 | 43 |
+-----------------+-------------------+---------------+
Message-table
+------------+---------+---------------------------------+
| message_id | user_id | message |
+------------+---------+---------------------------------+
| 1 | 3 | "Yea, i really like him a lot." |
| 2 | 5 | "Let's meet up later!" |
| 3 | 13 | "Wow, thanks!" |
+------------+---------+---------------------------------+
Conversation_users-table
+----+-----------------+---------+
| id | conversation_id | user_id |
+----+-----------------+---------+
| 1 | 1 | 3 |
| 2 | 1 | 1 |
| 3 | 1 | 2 |
| 4 | 2 | 5 |
| 5 | 3 | 13 |
+----+-----------------+---------+
在我的界面中,我希望显示用户当前参与的所有会话以及其他参与者的用户名。
为了做到这一点,我必须从用户参与的conversation_user-table中获取所有的对话ID,然后再次通过表格获取用户ID'这些对话的所有其他参与者都是。
它适用于这样的子查询:
SELECT user_id, conversation_id FROM conversation_users WHERE conversation_id IN (SELECT conversation_id FROM conversation_users WHERE user_id = 1)
但我担心嵌套查询会大大降低性能。
有更好的方法来进行此查询吗?
此致