PHP MySQL 3表外键将数据从1个表转换为另外2个表

时间:2019-01-03 18:33:27

标签: php mysql join foreign-keys

我有3个表OrderCheckoutStatusStatusesOrderCheckoutStatus中有一个引用Statuses表的外键。

我需要将CheckoutStatus链接到Order列所链接的PO,并且需要将Statuses链接到OrderCheckoutStatus

以下是表中的数据

订单表

`PO` = 123456
foreign key `Statuses_id` = 2

CheckoutStatus

`PO` = 123456
foreign key `Statuses_id` = 0

状态

`id` 0 = Complete
`id` 2 = Completed

如何编写我的SQL语句,以便获得这样的结果。

Order
123456
Completed
CheckoutStatus
123456
Complete

除非删除了该语句的JOIN Statuses部分之一,否则我正在使用的SQL语句不会显示任何内容。

SELECT * FROM `Order` JOIN `Statuses` ON Statuses.id = Order.Statuses_id JOIN `CheckoutStatus` ON Order.PO = CheckoutStatus.PO JOIN `Statuses` ON Statuses.id = CheckoutStatus.Statuses_id

2 个答案:

答案 0 :(得分:1)

表状态上有两个JOIN。您需要使用表别名来区分这两种关系:

SELECT 
    `Order`.PO,
    s1.Status,
    s2.Status
FROM 
    `Order` 
    JOIN `Statuses` s1 ON s1.id = Order.Statuses_id 
    JOIN `CheckoutStatus` ON Order.PO = CheckoutStatus.PO 
    JOIN `Statuses` s2 ON s2.id = CheckoutStatus.Statuses_id

答案 1 :(得分:0)

这会使您感到困惑,您可以拆分查询,并根据获取的结果进一步获取

      $sql4 = "SELECT * FROM `Order` JOIN `Statuses` ON Statuses.id = 
               Order.Statuses_id JOIN `CheckoutStatus` ON somthing"
                $result4 = mysqli_query($conn, $sql4);
            if (mysqli_num_rows($result4) > 0)
             {
             while($row3 = mysqli_fetch_assoc($result4))
             {
             $sql5='SELECT * FROM //the result of before joining other two '
                    }
                 }

类似的东西