0

目前我需要了解如何列出我的 (collaborator_a) 协作者的 (collaborator_b)协作者及其事件实例。

目前如何运作:

对于“合作者B

  1. 协作者 B单击协作者 A项目页面上的“将我连接到项目”按钮。
  2. 协作者 A的用户 ID保存为collaborator_a
  3. 协作者 B的用户 ID保存为collaborator_b
  4. Collaborator B想要链接的项目ID ,保存为event_instance_id_a
  5. 为Collaborator B创建了Collaborator A项目的一个实例。这个新项目实例的 ID 保存为event_instance_id_b

这也是为“协作者 A ”创建的,但 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

事件实例

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?

4

1 回答 1

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并尽可能分开查询。

于 2013-02-21T08:58:41.903 回答