gpt4 book ai didi

php - 多个内部联接和一对一//一对多关系

转载 作者:行者123 更新时间:2023-11-29 14:09:43 26 4
gpt4 key购买 nike

我在下面有这个查询。所有表的关系都是一对一的关系,除了 ASSOCPRODUCTS 表,其中每个订单有两种产品。一切似乎都工作正常,除了我的查询仅返回一行,因此,当实际上有两个产品 ID 时,只会返回一个产品 ID。我明白为什么它只拉一个,因为每个 orderID 只有一个订单,但每个契约(Contract)有两个关联产品,我需要获取每个产品 id。在 Assocproducts 表中,每个产品都有自己的行,因为它与契约(Contract)表是一对多的。

是否可以使用内部联接获取该信息,或者我是否需要运行另一个查询?

$orderid = $_POST['orderid'];

$res = mysql_query ("
SELECT company.name as cname,
orders.datemade as datemade
orders.p1quantity as p1q,
orders.p2quantity as p2q,
assocproducts.productid as pid,
assocproducts.price as pprice,
inventory.name as pname,
inventory.quantity as pquantity
FROM orders
INNER JOIN contracts ON (contracts.id = orders.contractid)
INNER JOIN company ON (contracts.companyid = company.id)
INNER JOIN assocproducts ON (contracts.id = assocproducts.contractid)
INNER JOIN inventory ON (assocproducts.productid = inventory.id)
WHERE orders.id = " . $orderid);

$order = mysql_fetch_assoc($res);

如果我需要提供更多信息,请告诉我。

$order 不在循环中,因为我只需要显示该特定订单的订单信息。这是点击时的 AJAX 触发器。

谢谢!

最佳答案

我认为您说只返回一行是错误的。我创建了一个新架构,仅包含查询中使用的列,用示例数据填充它并获取所有匹配结果。我认为问题在于您对 mysql_fetch_assoc() 函数的使用。 this function 的语义很清楚:

Returns an associative array of strings that corresponds to the fetched row, or FALSE if there are no more rows.

所以我的猜测是你再也不会调用mysql_fetch_assoc()了。

考虑到 INNER JOIN 的语义和您的数据约束,您的查询将始终生成 0 或 1 行。如果您不知道原因 - 请阅读 SQL JOIN types & behavior 。因此,您有两种选择来获取订单详细信息和相关产品的信息:

  1. 使用两个单独的选择语句 - 第一个用于订单详细信息(始终为 1 行),第二个用于关联产品(2 行)。迭代第二个查询的结果 - 您将为提取的每一行获取有关一种产品的信息。
  2. 保留现有查询,但通过迭代所有行来更改从中检索数据的方式(请注意,订单信息将出现在所有提取的行中,并且对于所有行都相同):

    $firstRow = true;
    while (($order_product = mysql_fetch_assoc($res)) !== FALSE) {
    if ($firstRow) {
    // do something with order info
    // but don't repeat it for consecutive rows
    $firstRow = false;
    }
    // do something with currently fetched associated product info
    }

这是一个品味问题,但我会选择第一个选项 - 它看起来不那么老套。

关于php - 多个内部联接和一对一//一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13708277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com