【发布时间】:2011-10-21 00:20:09
【问题描述】:
我的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 表中。一条消息的接收者可能不止一个。
【问题讨论】:
-
您确定需要单独的表来存储 facebook_id 吗?在用户表中有一个字段 facebook_id 怎么样,它可以是 null 也可以有一个值。每当有人通过 facebook 创建帐户时,您都会使用一些随机用户名(或使用 facebook 的电子邮件)和随机密码即时创建用户。然后你总是可以使用 user_id,如果你有 facebook 用户,你首先检查相应的 user_id