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
我想做一个连接查询,它基本上选择了发给一个特定的人的所有消息,但事情是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')
之类的东西?
select m.*, u.*
from messages m
inner join messages_to mt
on m.id = mt.message_id
left join profile p
on ( m.type = 'facebook' and mt.user_id = p.facebook_id)
or ( m.type = 'main' and mt.user_id = p.user_id)
left join users u
on p.user_id = u.id
为什么你把messages
和messages_to
表分开,而不使用一个表?(我假设是1:1的关系)