2016-11-15 107 views
1

我對MySQL很新穎(一般來說sql),我正在努力工作。 我有2個表,第一個表包含'客戶'列表,第二個表'用戶'列表。在第一個表格中,有些列包含「合同管理者」和「業務發展」的用戶ID號碼。該ID只是一個數字,引用「用戶」表中的ID號碼。用戶表然後存儲有問題的用戶的名字,姓氏等。INNER JOIN與另一個表給出一個字段兩次?

我想運行一個查詢,它將返回合同管理員和業務開發經理的名字和姓氏,然後在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  : [email protected] : 
+--------------------------------------------------------------+ 
: 2   : Tom    : Watson   : [email protected] : 
+--------------------------------------------------------------+ 

我已經添加了表 - 頂部是客戶表,第二個用戶。

+1

您是否嘗試過使用LEFT JOIN? –

+0

你只需要指定你需要的列而不是使用'*'。這樣你可以分配一個別名。然後,只需使用您在PHP中分配的別名。 –

回答

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

我已經添加了我的表格佈局,我想我很困惑。 – Sam

+0

我會用正確的列名調整答案,但除此之外,這應該仍然有效。如果你沒有得到正確的列,你可能需要使用'LEFT JOIN'而不是像Robert Lee所說的'INNER JOIN'。 – aynber

+0

!!優秀!!謝謝你。 – Sam

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 JOINLEFT JOIN,使其包括客戶端,而一個或另一個或無倆。

相關問題