与另一个表的INNER JOIN给一个字段两次


INNER JOIN with another table gives one field twice?

我是MySQL(一般sql)的新手,我正在努力解决一些问题。我有2个表,第一个表包含"客户"列表,第二个表包含"用户"列表。在第一个表中,有一些列包含"合同经理"answers"业务开发"的userID号。ID只是一个数字,它引用了'users'表中的ID号。然后,users表存储用户的名、姓等信息。

我试图运行一个查询,将返回合同经理和业务开发经理的姓和名,然后在PHP中使用它们。

我有以下查询;

SELECT 
    * 
FROM
    clients
INNER JOIN
    tenantusers AS cm ON cm.tenusr_ID = clients.cli_ContractManager
INNER JOIN
    tenantusers AS bd ON bd.tenusr_ID = clients.cli_BusinessDevelopment
ORDER BY cli_Name;

在MySQL仪表板返回正确的结果,但我不能在PHP中使用这个,因为

$t = $row['tenusr_FirstName'] . " " . $row['tenusr_LastName']; 

返回查询的最后一个结果,而不是前一个结果。说实话,我也不知道怎么弄到。我试过使用db.tenusr_FirstName,它抛出错误。

任何帮助都会很感激。

+--------+----------+------------------+---------------+----------------------+-------------------------+
: cli_ID : cli_Name : cli_AddressLine1 : cli_Town      : cli_ContractManager  : cli_BusinessDevelopment :
+-------------------------------------------------------------------------------------------------------+
: 1      : ACME     : On a street      : Makeuptington : 1                    : 2                       :
+--------+----------+------------------+---------------+----------------------+-------------------------+
+-----------+-----------------+-----------------+--------------+
: tenusr_ID : tenusr_Username : tenusr_LastName : tenusr_Email :
+--------------------------------------------------------------+
: 1         : Sam             : Smithers        : make@it.com  :
+--------------------------------------------------------------+
: 2         : Tom             : Watson          : tom@fake.net :
+--------------------------------------------------------------+

我已经添加了表格——最上面是客户表,其次是用户表。

PHP中不能有同名的列。只选择需要的列,并使用AS

别名命名列
SELECT 
    cm.tenusr_Username AS contract_FirstName, 
    cm.tenusr_LastName AS contract_LastName, 
    bd.tenusr_Username AS business_FirstName, 
    bd.tenusr_LastName AS business_LastName 
    ....

你可以使用

$t = $row['contract_FirstName'] . " " . $row['contract_LastName']; 

另一个答案也是正确的。我离开了clients.*,如果你需要的话,它将从客户端选择所有行,但是如果你不需要的话,你应该忽略它。

SELECT 
    clients.*,  cm.FirstName as CMFirstName, cm.LastName as CMLastName, bd.FirstName as BDFirstName, bd.LastName as BDLastName
FROM
    clients
INNER JOIN
    tenantusers AS cm ON cm.tenusr_ID = clients.cli_ContractManager
INNER JOIN
    tenantusers AS bd ON bd.tenusr_ID = clients.cli_BusinessDevelopment
ORDER BY cli_Name;
在PHP中

$bd = $row['BDFirstName'] . " " . $row['BDLastName']; 
$cm = $row['CMFirstName'] . " " . $row['CMLastName']; 

如果不是所有用户都有合同经理和业务开发人员,您应该将INNER JOIN更改为LEFT JOIN,因此它将包括没有其中一个或另一个或没有两者的客户。