2010-06-13 69 views
0

所以我就是設置有點像這樣的數據庫(簡化,並在表的條款,都是InnoDBs):MySQL查詢用於獲取屬於用戶的聯繫人的所有消息

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查詢來獲取屬於特定用戶的所有聯繫人的所有消息?有沒有一種有效的方法來做到這一點?

+0

你的問題不清楚IMO。鑑於你所說的話,消息和聯繫人之間沒有直接關係。如果消息與聯繫人相關,則您尚未說明該關係的性質。如果您爲所有三個表提供Create table語句,包括與所討論的三個表有關的外鍵約束,這將非常有幫助。 – Thomas 2010-06-13 05:18:03

回答

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'; 

嗯重新閱讀您的問題後 - 我注意到,「必須是相互的事情」。這聽起來像你還需要一個存在查詢來檢查該部分以將結果限制爲僅相互關係。

如果您提供了示例表定義,可能會更容易編寫。

+0

作品,謝謝! – 2010-06-13 19:43:41

相關問題