2013-02-20 19 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映射表上的索引,并在可能的情况下分开查询。

相关问题