2013-02-20 46 views
0

目前我需要了解如何列出我的(collaborator_a)協作者(collaborator_b)協作者及其事件實例。我該如何獲得使用mysql的協作者的協作者?

它目前是如何工作的:

對於「合作者乙

  1. 合作者乙點擊了「我連接到項目」按鈕合作者一個項目頁面。
  2. 協作者甲的用戶ID被保存爲collaborator_a
  3. 協作者乙的用戶ID被保存爲collaborator_b
  4. 項目合作者乙要鏈接到的ID ,保存爲event_instance_id_a
  5. 的一個實例合作者A的項目是cr參與合作者B。這個新項目實例的ID被保存爲event_instance_id_b

這是所有正在爲「合作者一個」以及創建,但ID的被鏡像。

結束。

我的表看起來是這樣的:

合作者

id collaborator_a collaborator_b event_instance_id_a event_instance_id_b 
-- -------------- -------------- ------------------- ------------------- 
1 1    2    1     2 
2 2    1    2     1 
3 1    3    1     3 
4 3    1    3     1 
5 6    9    4     5 
6 9    6    5     4 
7 1    9    6     5 
8 9    1    5     6 

event_instance

id user_id description 
-- ------- -------------- 
1 1  Some event desc...    
2 2  Some event desc...  
3 3  Some event desc...  
4 6  Some event desc...  
5 9  Some event desc... 
6 1  Some event desc... 

用戶

id username 
-- -------- 
1 username_1   
2 username_2   
3 username_3   
4 username_4  
5 username_5  
6 username_6 
7 username_7  
8 username_8  
9 username_9 

我能得到我的(* collaborator_a *)自己的合作者(* collaborator_b *)和他們的活動情況是這樣的:

變量

$user_id = 1 
$event_instance_id_a = 2 

MySQL的

SELECT c.*, u.*, e.* 
FROM (collaborator c) 
JOIN event_instance e ON c.event_instance_id_b = e.id 
JOIN user u ON c.collaborator_b = u.id 
WHERE c.event_instance_id_a = $event_instance_id_a 
AND c.collaborator_a = $user_id 

任何友善的人都可以幫助我找到我的協作者的協作者到特定的事件實例ID?

+0

您可以添加所需的數據輸出嗎?知道應該返回哪些數據有所幫助。 – stwhite 2013-02-21 08:17:07

回答

0

不完全確定你在做什麼...但如果你試圖讓一個事件所有的貢獻者,這應該工作http://sqlfiddle.com/#!3/2d1a0/1

create table event_collaborators (
    event_id int, 
    collaborator_id int 
); 

create table events (
    id int, 
    user_id int, 
    description varchar(255) not null 
); 

create table users (
    id int, 
    username varchar(25) not null 
); 

我這樣做可能不回答你的問題你適應這樣的列,這是比較容易理解,但完全。

SELECT ec.*, e.*, u.username 
FROM event_collaborators AS ec 
INNER JOIN events AS e ON ec.event_id = e.id 
INNER JOIN users as u ON ec.collaborator_id = u.id 
WHERE ec.event_id = 3; 

使用*是一個非常糟糕的主意,但出於演示的目的,它沒關係。我也不喜歡兩個大INNER JOINS的想法,所以我會使用event_collaborators映射表上的索引,並在可能的情況下分開查詢。

相關問題