2009-08-22 128 views
0

我在MySQL的至少4代表爲我的PHP應用程序(縮短它在這個例子中)如何從多個mySQL表中選擇並輸出到PHP?

代理 - AGENT_ID - AGENT_NAME

國家 - COUNTRY_ID - COUNTRY_NAME

工作 - Job_ID - Job_Type

Line_Items - Line_ID - AGENT_ID - COUNTRY_ID - JOB_ID

現在,我需要從Line_Items選擇在哪裏,以及AGENT_ID = 1而不是回聲荷蘭國際集團的AGENT_ID,COUNTRY_ID和JOB_ID在他們的整數,我想輸出自己的名字,而不是(Agent_Name,Country_Name,Job_Type)。

  1. 如何編寫查詢?
  2. 如何使用良好的$ result = mysql_query(「select ....」)在PHP中輸出此信息; while($ row = mysql_fetch_query($ result)){echo .....};

回答

2

你需要加入表:

SELECT A.Agent_Name, C.Country_Name, J.Job_Type 
FROM Line_Items LI, Agents A, Country C, Job J 
WHERE LI.Agent_ID = 1 AND LI.Agent_ID = A.Agent_ID AND 
     LI.Country_ID = C.Country_ID AND LI.Job_ID = J.Job_ID 

此外,可以考慮使用視圖,就像這樣:

CREATE VIEW Line_Items_Detail 
AS 
    SELECT LI.Agent_ID, A.Agent_Name, C.Country_Name, J.Job_Type 
    FROM Line_Items LI, Agents A, Country C, Job J 
    WHERE LI.Agent_ID = 1 AND LI.Agent_ID = A.Agent_ID AND 
     LI.Country_ID = C.Country_ID AND LI.Job_ID = J.Job_ID 

然後,使用視圖,您的查詢簡單如下:

SELECT Agent_Name, Country_Name, Job_Type 
FROM Line_Items_Detail 
WHERE Agent_ID = 1 

使用任何這些查詢,您可以使用您編寫的PHP代碼輸出結果。

希望它有幫助。


編輯

使用的第一個查詢,你的PHP會是這樣(簡化):

$query = "SELECT A.Agent_Name, C.Country_Name, J.Job_Type FROM Line_Items LI, Agents A, Country C, Job J WHERE LI.Agent_ID = 1 AND LI.Agent_ID = A.Agent_ID AND LI.Country_ID = C.Country_ID AND LI.Job_ID = J.Job_ID"; 
$result = mysql_query($query); 
while($row = mysql_fetch_query($result)) { 
    echo "Agent:" . $row['Agent_Name']."<br>"; 
    echo "Country:" . $row['Country_Name']."<br>"; 
    echo "Job:" . $row['Job_Type']."<br>"; 
} 

當然,您需要更改LI.Agent_ID如果你需要一個不同的ID。您可以爲其使用佔位符並替換爲正確的ID,或將正確的ID連接到查詢。

+0

對不起,不知道如何可以對這些結果在PHP :( – Felix 2009-08-22 18:28:50

+0

我已經編輯我原來的職位,以應付這一點。 – 2009-08-22 18:36:42

+0

謝謝謝謝謝謝! 這個工作,我愛StackOverflow的輸出! – Felix 2009-08-22 18:47:02

0

只要在這裏與JG一起使用連接。但是,這裏有一個用於連接表的替代(並且更爲接受的)語法。

SELECT A.Agent_Name, C.Country_Name, J.Job_Type 
FROM Line_Items LI 
INNER JOIN Agents A 
ON LI.Agent_ID = A.Agent_ID 
INNER JOIN Country C 
LI.Country_ID = C.Country_ID 
INNER JOIN Job J 
ON LI.Job_ID = J.Job_ID 
WHERE LI.Agent_ID = 1 

如果國家,代理或作業行可能不存在,則可以使用LEFT JOIN而不是內部聯接。使用INNER JOIN,正如我所做的那樣,如果沒有國家,就不會返回行。

+0

因此,對於PHP輸出,這應該工作? while($ row = mysql_fetch_array($ result)) { echo「Agent:」。 $ row ['A.Agent_Name']。「
」; 回聲「國家:」。 $ row ['C.Country_Name']。「
」; 回聲「工作:」。 $ row ['J.Job_Type']。「
」; } – Felix 2009-08-22 18:24:46

+0

使用var_dump($ row)查看$ row的內容。 – VolkerK 2009-08-22 18:35:08