如何使用mysql获得协作者的协作者?

时间:2013-02-20 17:07:56

标签: mysql

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

目前的工作原理:

对于“ Collaborator B

  1. 协作者B 点击 Collaborator A 项目页面上的“将我连接到项目”按钮。
  2. 协作者A 的用户ID保存为 collaborator_a
  3. 协作者B 的用户ID保存为 collaborator_b
  4. 项目协作者B 想要链接的ID,保存为 event_instance_id_a
  5. Collaborator B 创建 Collaborator A 项目的实例。此新项目实例的ID保存为 event_instance_id_b
  6. 这也是为“ Collaborator 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
    

    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吗?

1 个答案:

答案 0 :(得分: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映射表上使用索引,并在可能的情况下将查询分开。