目前,我需要了解如何列出我的(collaborator_a)协作者(collaborator_b)协作者及其活动实例。
目前的工作原理:
对于“ Collaborator B ”
这也是为“ 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吗?
答案 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
映射表上使用索引,并在可能的情况下将查询分开。