Php 使用第一个表的输出从第二个表中选择特定数据

Php 使用第一个表的输出从第二个表中选择特定数据,php,mysql,select,mysqli,Php,Mysql,Select,Mysqli,我有两张桌子。一个是account,另一个是client表。用户将提供输入,在本例中为19。我想做的是,我只想使用client_id作为标识符从客户机中选择一个名称,并且只使用一个select语句。我可以做两次select查询,但这不是我想要的 为了更好地解释它:用户输入$id=19,我将使用account表中的id来标识client_id,在本例中为17。然后,我将使用client_id从client表中选择name 账表 客户表 我已经看过join和left join了,但我还是被卡住了

我有两张桌子。一个是account,另一个是client表。用户将提供输入,在本例中为19。我想做的是,我只想使用client_id作为标识符从客户机中选择一个名称,并且只使用一个select语句。我可以做两次select查询,但这不是我想要的

为了更好地解释它:用户输入$id=19,我将使用account表中的id来标识client_id,在本例中为17。然后,我将使用client_id从client表中选择name

账表

客户表

我已经看过join和left join了,但我还是被卡住了。请帮我做这个。提前谢谢

我当前的非工作代码:

$sql = " SELECT account.id, client.client_id\n"
    . " FROM account, client\n"
    . " WHERE account.id = 19";
这应该使用内部联接工作:

您的查询正在生成笛卡尔积,因为您没有在任何字段上联接表

这应该使用内部联接工作:

您的查询正在生成笛卡尔积,因为您没有在任何字段上联接表


一个简单的内部联接将完成此任务

 $query = "select 
                  account.id,client.client_id 
           from 
                  account 
           join 
                  client 
            on 
                  account.client_id = client.client_id 
           where 
                  account.id = 19";

一个简单的内部联接将完成此任务

 $query = "select 
                  account.id,client.client_id 
           from 
                  account 
           join 
                  client 
            on 
                  account.client_id = client.client_id 
           where 
                  account.id = 19";

由于您没有提供有关客户端表结构的信息,因此这只是一个猜测:

SELECT account.id, client.client_id
FROM account, client
WHERE account.id = 19
  AND account.client_id = client.id

由于您没有提供有关客户端表结构的信息,因此这只是一个猜测:

SELECT account.id, client.client_id
FROM account, client
WHERE account.id = 19
  AND account.client_id = client.id

您没有加入帐户和客户。 此外,您只需要客户端名称,查询必须为:

Select distinct client.client_name from account, client where client.client_id=account.account_id and account_id=19 

您没有加入帐户和客户。 此外,您只需要客户端名称,查询必须为:

Select distinct client.client_name from account, client where client.client_id=account.account_id and account_id=19 

您需要指定用于连接这两个表的列

SQL语言的一个不幸事实是,默认行为是通过将一个表中的每一行与另一个表中的每一行相匹配来连接两个表。也就是说,每个可能的配对都是结果集的一部分。SQL无法推断要将哪些列用作联接条件,因此必须自己指定条件

这里有一个更好的查询表单:

$sql = " SELECT account.id, client.client_id
    FROM account JOIN client USING (client_id) 
    WHERE account.id = 19";
一定要使用连接语法。自1992年以来,它一直是SQL中进行连接的标准方法。逗号样式语法仅用于向后兼容1992年以前的SQL。它们的性能完全相同,但是1992年的语法可以进行外部连接,并且更易于阅读


PS:PHP支持多行字符串,所以不需要像您这样将字符串连接在一起。这是Java的习惯。

您需要指定用于连接两个表的列

SQL语言的一个不幸事实是,默认行为是通过将一个表中的每一行与另一个表中的每一行相匹配来连接两个表。也就是说,每个可能的配对都是结果集的一部分。SQL无法推断要将哪些列用作联接条件,因此必须自己指定条件

这里有一个更好的查询表单:

$sql = " SELECT account.id, client.client_id
    FROM account JOIN client USING (client_id) 
    WHERE account.id = 19";
一定要使用连接语法。自1992年以来,它一直是SQL中进行连接的标准方法。逗号样式语法仅用于向后兼容1992年以前的SQL。它们的性能完全相同,但是1992年的语法可以进行外部连接,并且更易于阅读

PS:PHP支持多行字符串,所以不需要像您这样将字符串连接在一起。这是Java的习惯。

也许你应该试试:

$sql = "SELECT account.id, client.client_id
        FROM account, client
        WHERE account.client_id=client.id AND account.id = 19 "
也许你应该试试:

$sql = "SELECT account.id, client.client_id
        FROM account, client
        WHERE account.client_id=client.id AND account.id = 19 "
这应该可以帮你 从a.client\u id=c.client\u id上客户端c上的帐户a左连接中选择c.name、c.client\u id、a.id 如果a.id=19

这应该能帮到你 从a.client\u id=c.client\u id上客户端c上的帐户a左连接中选择c.name、c.client\u id、a.id
其中a.id=19

为什么在查询中使用换行符…这不好…为什么在查询中使用换行符…这不好…最好对多行字符串使用HEREDOC。处理起来比在任何地方嵌入换行符都要容易得多。Heredocs很好,但fwiw多行字符串也隐式包含换行符。无需使用\n。我只需要名称,如下所示:从帐户选择client.name使用client_id加入客户端,其中account.id=19感谢您的想法和帮助。我很感激。更好的是,多行字符串使用herdoc。处理起来比在任何地方嵌入换行符都要容易得多。Heredocs很好,但fwiw多行字符串也隐式包含换行符。无需使用\n。我只需要名称,如下所示:从帐户选择client.name使用client_id加入客户端,其中account.id=19感谢您的想法和帮助。我很感激。对于给定的帐户id,只有一个客户id,因此只有一个客户名称。我看到的只是强制筛选帐户。id=19。有了它,您将得到一个且只有一个客户端id,它在这里和那里修复了几次之后才能工作:从帐户中选择DISTINCT client.name,client WHERE client.client_id=account.client_id和id=19限制0,3
0再次感谢对于给定的帐户id,只有一个客户端id,因此只有一个客户端名称。我看到的只是强制筛选帐户。id=19。有了这个,你将得到一个并且只有一个Client SydId:在这里有几个固定的地方:从帐户中选择不同的client .Client,client。client id=Actudio;Client Sid和ID=19限制0, 30。请考虑添加一个注释来解释你的SELECT语句。@ Trimimon,这就是互联网的目的。周围有大量的文档。有时候你只是想知道答案,否则就是英语。如果你不知道连接意味着什么,解释也不利于你考虑添加一个解释你的SELECT语句的注释。@ Trimimon,这就是互联网的目的。周围有大量的文档。有时候你只是想知道答案,否则就是英语。如果你不知道join是什么意思,解释对他没有帮助,它确实起作用,但我不理解这个东西c.姓名,客户c,帐户A等等。这个c和c是什么意思?就像在查询中声明一个新的临时变量一样?无论如何,谢谢你的帮助。@sg552-np,很高兴我们能帮忙。关于a和c,这些只是表上的别名-速记,而不必键入Client.Name或Client.Client_Id。您可以只键入c.Name或c.Client_Id。致以最良好的问候。它确实有效,但我不理解这件事c.Name、Client c、Account a等。这c和c是什么意思?就像在查询中声明一个新的临时变量一样?无论如何,谢谢你的帮助。@sg552-np,很高兴我们能帮忙。关于a和c,这些只是表上的别名-速记,而不必键入Client.Name或Client.Client_Id。您可以只键入c.Name或c.Client_Id。祝您好运。