Php MySQL:选择“project\u id”等于任何具有特定“user\u id”的“project”的行`
这不会太难,但我不知道我要找的术语是什么。我相信你们能帮我的忙。:) 我有一个表Php MySQL:选择“project\u id”等于任何具有特定“user\u id”的“project”的行`,php,mysql,sql,select,Php,Mysql,Sql,Select,这不会太难,但我不知道我要找的术语是什么。我相信你们能帮我的忙。:) 我有一个表tasks,其中的行有一个列project\u id。每个project\u id引用projects表中一行的id。每个项目都属于某个用户,这就是为什么它有一列用户id 现在我想从该表中选择所有任务,其中项目id等于某个用户的任何项目 或者更简单地说: 每个任务都属于属于用户的项目 我想创建一个SELECT语句来接收属于特定用户的所有任务。每个任务和用户之间的唯一链接是通过项目 我如何做到这一点 非常感谢您的帮助!
tasks
,其中的行有一个列project\u id
。每个project\u id
引用projects
表中一行的id
。每个项目
都属于某个用户
,这就是为什么它有一列用户id
现在我想从该表中选择所有任务
,其中项目id
等于某个用户的任何项目
或者更简单地说:
每个任务都属于属于用户的项目
我想创建一个SELECT语句来接收属于特定用户的所有任务。每个任务和用户之间的唯一链接是通过项目
我如何做到这一点
非常感谢您的帮助!:) 试试看:
SELECT t.*
FROM user u, projet p, task t
WHERE u.id = p.user_id
AND p.id = t.project_id
AND u.id = your_id
或(相同结果):
尝试:
或(相同结果):
加入
表格:
SELECT
t.*
FROM tasks t
INNER JOIN projects p ON t.project_id = p.project_id
INNER JOIN users u ON p.user_id = u.user_id
WHERE u.user_id = @AcertianUserId
加入
表格:
SELECT
t.*
FROM tasks t
INNER JOIN projects p ON t.project_id = p.project_id
INNER JOIN users u ON p.user_id = u.user_id
WHERE u.user_id = @AcertianUserId
那些中的条件应该是连接的一部分(为了清晰/可读性)。结果与内部连接相同,而且性能似乎也一样。此外,如果您曾经转换为左连接
,它会变得更容易——在WHERE
中设置条件将有效地使其成为内部连接
(除非您随后添加另一个WHERE
条件以允许NULL
),在我的第一次查询中,您只需在u.id=p.user\id
限制(u.id=p.user\id(+)
)的末尾添加一个(+)
,即可将内部连接更改为左连接。非常感谢您的快速响应!)那些中的条件应该是连接的一部分(为了清晰/可读性)。结果与内部连接相同,而且性能似乎也一样。此外,如果您曾经转换为左连接
,它会变得更容易——在WHERE
中设置条件将有效地使其成为内部连接
(除非您随后添加另一个WHERE
条件以允许NULL
),在我的第一次查询中,您只需在u.id=p.user\id
限制(u.id=p.user\id(+)
)的末尾添加一个(+)
,即可将内部连接更改为左连接。非常感谢您的快速响应!)谢谢,这工作做得很好。如果我可以再问一个问题:我必须以这种方式获取行,这是否是糟糕的数据库设计的症状?我是否应该重构我的数据库结构,以便每个任务都直接拥有一个用户id?@Macks-当然,随时都可以。不是不是,这是你建议的更好的数据库设计的同义词。太棒了,这让我感觉非常专业。:)编辑:每个项目只属于一个用户。@Macks=注意:这取决于:每个任务是否有一个单独的用户对其负责,或者只是负责整个项目的用户?在这种情况下,如果每个用户负责一个特定的任务,那么每个任务都有一个用户可能会更好。是的,每个项目只属于一个用户。一个用户可以有多个项目,但每个项目只有一个用户。谢谢,这非常有效。如果我可以再问一个问题:我必须以这种方式获取行,这是否是糟糕的数据库设计的症状?我是否应该重构我的数据库结构,以便每个任务都直接拥有一个用户id?@Macks-当然,随时都可以。不是不是,这是你建议的更好的数据库设计的同义词。太棒了,这让我感觉非常专业。:)编辑:每个项目只属于一个用户。@Macks=注意:这取决于:每个任务是否有一个单独的用户对其负责,或者只是负责整个项目的用户?在这种情况下,如果每个用户负责一个特定的任务,那么每个任务都有一个用户可能会更好。是的,每个项目只属于一个用户。一个用户可以有多个项目,但每个项目只有一个用户。谢谢Olaf,我现在明白了!)谢谢奥拉夫,我现在明白了!:)
SELECT
tasks.*
FROM
users
INNER JOIN
projects ON users.id = projects.user_id
INNER JOIN
tasks ON projects.id = tasks.project_id
WHERE
users.id = 1
select t.*
from tasks t
join projects p on p.id = t.project_id
join users u on u.id = p.user_id
where u.id = 17