如何从多个mySQL表中选择并输出到PHP?

时间:2009-08-22 18:05:35

标签: php sql mysql

我的PHP应用程序在MySQL中至少有4个表(在本例中缩短了它)

代理 - 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 个答案:

答案 0 :(得分: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>";
}

当然,如果您需要不同的ID,则需要更改LI.Agent_ID。您可以只使用占位符替换正确的ID,或者将正确的ID连接到查询。

答案 1 :(得分: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,正如我所做的那样,如果没有国家,将不会返回任何行。