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

时间:2016-11-15 18:14:15

标签: php mysql

我是MySQL的新手(一般的sql),我正在尝试解决问题。 我有2个表,第一个表包含'客户'列表,第二个表包含'用户'列表。在第一个表中,列中包含“合同经理”和“业务开发”的用户ID号。 ID只是一个数字,它引用“用户”表中的ID号。然后,users表存储有问题用户的名字,姓氏等。

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

我有以下查询;

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

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

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 : +--------------------------------------------------------------+ 并且它会抛出错误。

任何帮助将不胜感激。

def runRemoteFunc(event=None):
    hostname = remoteEntry.get()
    remoteFunc(hostname)
...
remoteButton = Button(..., command = remoteFunc)
...
app.bind('<Return>', remoteCommand)

我添加了表格 - top是客户表,第二是用户。

2 个答案:

答案 0 :(得分:2)

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']; 

答案 1 :(得分:1)

另一个答案也是对的。我离开了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,以便其中包含没有其中一个或两个的客户,或者不包含两者的客户。