Заменить значение на результат внешнего ключа

У меня есть таблица со всеми пунктами моего счета в виде пакетов:

              Table: invoice_items

invoice_item_id | package_id | addon_1 | addon_2 | addon_3 | ...
----------------|------------|---------|---------|
1       |     6      |    2    |    5    |    3    |

Тогда мой другой стол:

              Table: addons

addon_id |  addon_name  |        addon_desc        |
----------|--------------|--------------------------|
1     | Dance Lights | Brighten up the party... |
2     | Fog Machine  | Add some fog for an e... |

Вместо того, чтобы занимать место для хранения имени аддона в моей таблице invoice_items, я бы хотел просто включить addon_id в столбцы addon_1, addon_2 и т. Д.

Как я могу получить имя аддона при выполнении запроса для строк invoice_item?

Прямо сейчас я просто запрограммировал на странице, что если addon_id == 1, эхо «Dance Lights» и т. Д., Но я бы хотел сделать это в запросе. Вот мой текущий запрос:

                  $invoice_items_SQL = "
SELECT invoice_items.*, packages.*
FROM `invoice_items`

INNER JOIN packages ON invoice_items.invoice_item_id = packages.package_id

WHERE `event_id` = \"$event_id\"
";

Так что я могу сделать это с пакетами, но только потому, что в строке есть только один package_id, но есть до 9 дополнений 🙁

2

Решение

Самый прямой способ сделать это присоединиться к столу несколько раз. Это немного странно, потому что вы напишите почти одно и то же 9 раз.

Другой, лучший способ реструктурировать ваши таблицы — вам нужна другая таблица с двумя столбцами данных: invoice_id и addon_id. Затем вам понадобится либо первичный столбец с автоматическим включением, либо оба существующих столбца в качестве двойного первичного ключа. Так что это таблица соединений многих ко многим.

Оттуда вы можете выполнять запросы, не имея 9 повторяющихся объединений, но вы получите строку каждого пакета для каждого имеющегося у него дополнения (поэтому, если у него есть три дополнения, оно появится в результатах три раза). И затем оттуда вы можете использовать GROUP_CONCAT, чтобы объединить имена надстроек в одно поле, так что вы получите только одну строку на счет-фактуру.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector