【问题标题】:How do I select from multiple mySQL tables and output to PHP?如何从多个 mySQL 表中选择并输出到 PHP?
【发布时间】:2010-11-21 22:38:39
【问题描述】:

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

代理 - 代理_ID - Agent_Name

国家 - Country_ID - Country_Name

工作 - Job_ID - Job_Type

Line_Items - Line_ID - 代理_ID - Country_ID - Job_ID

现在,我需要从 Agent_ID = 1 的 Line_Items 中进行选择,而不是在整数中回显 Agent_ID、Country_ID 和 Job_ID,而是输出它们的名称(Agent_Name、Country_Name、Job_Type)。

  1. 如何编写查询?
  2. 如何在 PHP 中输​​出这个,使用常用的 $result = mysql_query("select ...."); while($row = mysql_fetch_query($result)){echo .....};

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

    您需要加入表格:

    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 连接到查询中。

    【讨论】:

    • 抱歉,不知道如何在 PHP 中输​​出这些结果:(
    • 谢谢谢谢谢谢!这很有效,我喜欢 StackOverflow!
    • 我刚刚意识到一件事......我的 Agent_Name、Country_Name 和 Job_Type 输出显示了 Agents、Country 和 Job 表中的第一个条目,而不是 LI 中的相应值桌子。这里有什么帮助吗?
    • 那是因为我在查询中插入了WHERE LI.Agent_ID = 1,因为您想获取该特定 Agent_ID 的数据。为了获取所有内容,您需要删除该Li.Agent_ID = 1 或插入另一个ID。希望对您有所帮助。
    【解决方案2】:

    这里只使用 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,就像我所做的那样,如果没有国家/地区,则不会返回任何行。

    【讨论】:

    • 那么对于 PHP 输出,这应该可行吗? while($row = mysql_fetch_array($result)) { echo "Agent:" . $row['A.Agent_Name']."
      ";回声“国家:”。 $row['C.Country_Name']."
      ";回声“工作:”。 $row['J.Job_Type']."
      "; }
    • 用 var_dump($row) 看看 $row 的内容。
    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多