用于获取属于用户联系人的所有消息的mysql查询

时间:2010-06-13 03:37:33

标签: sql mysql

所以我有一个类似这样的设置数据库(简化,就表而言,都是InnoDB):

Users:    contains based user authentication information (uid, username, encrypted password, et cetera)
Contacts: contains two rows per relationship that exists between users as
          (uid1, uid2), (uid2, uid1) to allow for a good 1:1 relationship
          (must be mutual) between users
Messages: has messages that consist of a blob, owner-id, message-id (auto_increment)

所以我的问题是,获取属于特定用户所有联系人的所有消息的最佳MySQL查询是什么?有没有一种有效的方法呢?

1 个答案:

答案 0 :(得分:1)

select m.owner-id, m.blob 
  from Users u
  join Contacts c on u.uid = c.uid1
  join Messages m on m.owner-id = c.uid2
 where u.username = 'the_username';

现在的问题是,这将返回所有联系人拥有的每条消息,无论消息是否与uid1和uid2之间的某些交互相关联。

此外,如果您想查看消息旁边的联系人姓名而不是uid:

select u2.username, m.blob 
  from Users u
  join Contacts c on u.uid = c.uid1
  join Messages m on m.owner-id = c.uid2
  join Users u2 on u2.uid = c.uid2
 where u.username = 'the_username';
在重新阅读你的问题之后,我注意到“必须是共同的事情”。听起来你还需要一个存在的查询来检查该部分,以便将结果限制为仅相互关系。

如果提供了样本表定义,可能更容易编写。