我有MYSQL表如下
user TABLE {id INT}
profile TABLE {user_id INT, facebook_id varchar(50)}
messages TABLE {id INT, message TEXT, from_id INT, type enum('main','facebook'}
messages_to TABLE {user_id varchar(50), message_id INT}
profile.user_id REFERS To user.id
- the messages_to.message_id refers to the messages.ID column.
- the messages_to.user_id refers to profile.user_id IF messages.type = 'main' BUT
if message_type = 'facebook' THEN messages_to.user_id REFERS to profile.facebook_id
Run Code Online (Sandbox Code Playgroud)
我想做一个基本上选择给特定人的所有消息的连接查询,但事情是messages_to.user_id可以引用 the person's facebook ID or the person's ID (a reference to user.id column).
所以基本上查询应该如下工作
messages.type = 'facebook'检查messages_to.user_id是否等于该人的FACEBOOK ID.(请注意,messages_to表存储每个邮件ID的收件人)messages.type = 'main'检查是否messages_to.user_id等于person's USER ID (USER.id)是否有可能有效地做到这mysql join query一点?
messages_tos表存储MESSAGES表中每条消息的所有收件人.一条消息可以有多于一个接收者.
我想这就是查询。
SELECT messages.*,profile.*
FROM messages
JOIN messages_to ON messages.id = messages_to.message_id
JOIN profile ON
(profile.user_id = messages_to.user_id AND messages.type = 'main')
OR (profile.facebook_id = messages_to.user_id AND messages.type = 'facebook')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |