PHP MySQL Выбрать оператор соединения запроса для отображения данных в виде таблицы с несколькими строками - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь отобразить заказы клиентов, которые хранятся в различных таблицах в базе данных. Я сталкиваюсь с проблемой, когда в заказе куплено более 1 типа товаров. Каждый элемент в заказе хранится в отдельных строках таблицы Transaction и использует один и тот же PO, но отличается TransPO.

Вот таблица образцов

Table: Order
|-----------------------------------------|
| id | PO   | Total | CreatedTime         |
| 1  | AF24 | 10.00 | 2019-01-17 20:17:36 | 
|-----------------------------------------|

Table: CheckoutStatus 
|----------------------------------|
| id | PO    | PaymentMethod       |
| 1  | AF24  | PayPal              |
|----------------------------------|

Table: Transaction
|----------------------------------------|
| id | TransPO | PO    | Price | QTY     |
| 1  | AF21    | AF24  | 3.00  | 1       |
| 2  | AF22    | AF24  | 4.00  | 1       |
| 3  | AF23    | AF24  | 3.00  | 1       |
|----------------------------------------|

Использование этого оператора Select в PHP извлекает данные из всех таблиц, но отображает данные Order и CheckoutStatus 3 раза.

SELECT
    `Order`.*, `CheckoutStatus`.*, `Transaction`.*

    FROM
    `Order`

    INNER JOIN `CheckoutStatus`
    ON
    Order.PO = CheckoutStatus.PO

    INNER JOIN `Transaction`
    ON
    Order.PO = Transaction.PO

    WHERE
    Order.PO = 'AF24'

Полученные данные

|--------------------------------------------------------------------------------------------------------------|
| id | PO   | Total | CreatedTime         | id  | PO   | PaymentMethod  | id  | TransPO | PO   | Price | QTY   |
| 1  | AF24 | 10.00 | 2019-01-17 20:17:36 | 1   | AF24 | PayPal         | 1   | AF21    | AF24   3.00  | 1     |
| 1  | AF24 | 10.00 | 2019-01-17 20:17:36 | 1   | AF24 | PayPal         | 2   | AF22    | AF24   4.00  | 1     |
| 1  | AF24 | 10.00 | 2019-01-17 20:17:36 | 1   | AF24 | PayPal         | 3   | AF23    | AF24   3.00  | 1     |
|--------------------------------------------------------------------------------------------------------------|

Для отображения в Интернете мне нужно показать данные Order и CheckoutStatus один раз и показать 3 строки таблицы Transaction.

Это то, что мне нужно

*Order*
ID: 1
PO: AF24
Total: 10.00
CreatedTime: 2019-01-17 20:17:36

*CheckoutStatus*
ID: 1
PO: AF24
PaymentMethod: PayPal

*Transaction*
ID: 1
TransPO: AF21
PO: AF24
Price: 3.00
QTY: 1

ID: 2
TransPO: AF22
PO: AF24
Price: 4.00
QTY: 1

ID: 3
TransPO: AF23
PO: AF24
Price: 3.00
QTY: 1

но я получаю отображение данных 3 раза

*Order*
ID: 1
PO: AF24
Total: 10.00
CreatedTime: 2019-01-17 20:17:36

*CheckoutStatus*
ID: 1
PO: AF24
PaymentMethod: PayPal

*Transaction*
ID: 1
TransPO: AF21
PO: AF24
Price: 3.00
QTY: 1

*Order*
ID: 1
PO: AF24
Total: 10.00
CreatedTime: 2019-01-17 20:17:36

*CheckoutStatus*
ID: 1
PO: AF24
PaymentMethod: PayPal

*Transaction*
ID: 2
TransPO: AF22
PO: AF24
Price: 4.00
QTY: 1

*Order*
ID: 1
PO: AF24
Total: 10.00
CreatedTime: 2019-01-17 20:17:36

*CheckoutStatus*
ID: 1
PO: AF24
PaymentMethod: PayPal

*Transaction*
ID: 3
TransPO: AF23
PO: AF24
Price: 3.00
QTY: 1

Какие изменения необходимы в операторе Select, чтобы получить нужный мне результат?

...