Php 使用内部联接的相当复杂的SQL语句(我猜想)

Php 使用内部联接的相当复杂的SQL语句(我猜想),php,mysql,sql,Php,Mysql,Sql,我很难理解如何编写SQL查询来返回下表结构的结果 我要做的第一件事是通过以下方式获取状态等于1的客户端列表: SELECT * FROM clients WHERE status=1 然后,我需要获得所有属于客户的用户电子邮件地址。我的计划是循环上面查询的结果,并为每个客户机运行多个查询。从“客户机用户列表”表中可以看到,一个用户可以属于多个客户机 我试过这样做: SELECT emailaddress FROM users INNER JOIN client_user_list ON u

我很难理解如何编写SQL查询来返回下表结构的结果

我要做的第一件事是通过以下方式获取状态等于1的客户端列表:

SELECT * FROM clients WHERE status=1
然后,我需要获得所有属于客户的用户电子邮件地址。我的计划是循环上面查询的结果,并为每个客户机运行多个查询。从“客户机用户列表”表中可以看到,一个用户可以属于多个客户机

我试过这样做:

SELECT emailaddress 
FROM users 
INNER JOIN client_user_list ON users.user_id = client_user_list.user_id 
WHERE users.client_id = 1
但它失败了。正如你所看到的,我在这方面完全是个新手。如有任何帮助,我们将不胜感激,或随时为我提供适当的资源,以了解更多信息。我已经看过了,但是我没有发现任何东西能涵盖像这样复杂的东西

其他信息:使用外键在客户端用户列表和客户端用户列表用户之间存在关系


非常感谢。

我不确定这是否是您唯一的问题,因为您没有指定确切的问题是什么,但查询的WHERE子句包含错误。您的查询应更改为:

SELECT DISTINCT emailaddress 
FROM users 
INNER JOIN client_user_list ON users.user_id = client_user_list.user_id 
WHERE client_user_list.client_id = 1

用户表没有名为client\u id的字段,client\u user\u list表有

我不确定这是否是您唯一的问题,因为您没有指定确切的问题是什么,但查询的WHERE子句包含错误。您的查询应更改为:

SELECT DISTINCT emailaddress 
FROM users 
INNER JOIN client_user_list ON users.user_id = client_user_list.user_id 
WHERE client_user_list.client_id = 1

用户表没有名为client\u id的字段,client\u user\u list表有

通过连接所有三个表,只需一个查询即可获得status=1的客户端及其用户:

select clients.client_id, clients.client_name, users.user_id, users.emailaddress
from clients
inner join client_user_list on client_user_list.client_id = clients.client_id
inner join users on client_user_list.user_id = users.user_id
where clients.status = 1
order by clients.client_id, users.user_id

通过连接所有三个表,您可以只通过一个查询获得status=1的客户端及其用户:

select clients.client_id, clients.client_name, users.user_id, users.emailaddress
from clients
inner join client_user_list on client_user_list.client_id = clients.client_id
inner join users on client_user_list.user_id = users.user_id
where clients.status = 1
order by clients.client_id, users.user_id

以下命令应解决此问题 我希望它是有用的

select distinct use.emailaddress
from clients cli
inner join client_user_list cul on (cli.client_id=cul.client_id)
inner join users use on (cul.user_id = use.user_id)
where cli.status = 1    

以下命令应解决此问题 我希望它是有用的

select distinct use.emailaddress
from clients cli
inner join client_user_list cul on (cli.client_id=cul.client_id)
inner join users use on (cul.user_id = use.user_id)
where cli.status = 1    

谢谢你指出这一点。在本例中,这绝对是一个问题,并且已经修复。但这并没有解决我的问题。@Tyler,那么剩下的问题是什么呢?我只是不知道如何从第一次查询得到的客户端id,到从该客户端的用户表中获取电子邮件地址列表。问题解决了。我使用了“character around users.user_id”。我修复了您指出的最初问题,删除了这些字符,现在可以使用了。真的很感激!而且我非常喜欢stackoverflow。我更关心的是它应该在一个问题中完成,就像其他答案所提供的那样。两阶段解决方案容易出现各种问题。我猜泰勒可能不懂怎么做三方连接。因此,我倾向于教授最佳解决方案。但至少我们现在都能理解你答案背后的理由。泰勒有两种类型的答案,这给了他两种途径。大家干得好。谢谢你们指出这一点。在本例中,这绝对是一个问题,并且已经修复。但这并没有解决我的问题。@Tyler,那么剩下的问题是什么呢?我只是不知道如何从第一次查询得到的客户端id,到从该客户端的用户表中获取电子邮件地址列表。问题解决了。我使用了“character around users.user_id”。我修复了您指出的最初问题,删除了这些字符,现在可以使用了。真的很感激!而且我非常喜欢stackoverflow。我更关心的是它应该在一个问题中完成,就像其他答案所提供的那样。两阶段解决方案容易出现各种问题。我猜泰勒可能不懂怎么做三方连接。因此,我倾向于教授最佳解决方案。但至少我们现在都能理解你答案背后的理由。泰勒有两种类型的答案,这给了他两种途径。大家都做得很好。一般来说,最好通过一个查询获得结果,而不是执行两个单独的查询语句。一般来说,最好通过一个查询获得结果,而不是执行两个单独的查询语句。