PHP MySQL 3 таблицы Внешний ключ Соединение данных из одной таблицы в другую 2 - PullRequest
0 голосов
/ 03 января 2019

У меня есть 3 таблицы Order, CheckoutStatus и Statuses. В Order и CheckoutStatus есть внешний ключ, который ссылается на таблицу Statuses.

Мне нужно присоединиться CheckoutStatus к Order, связанному столбцом PO, и мне нужно присоединиться к Statuses к Order и CheckoutStatus.

Вот данные в таблицах

Стол заказов

`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

Этот оператор SQL, который я использую, ничего не отображает, если я не удалю один из разделов JOIN Statuses оператора.

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 голосов
/ 03 января 2019

У вас есть два соединения в таблице статусов.Вам нужно использовать псевдонимы таблиц, чтобы различать две взаимосвязи:

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
0 голосов
/ 03 января 2019

это может немного сбить с толку, вы можете разбить запрос и на основе его извлеченного результата вы можете получить еще больше

      $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 '
                    }
                 }

что-то вроде этого

...