Представьте меня есть база данных с четырьмя таблицами: «shopping_list», «сладости», «книги»,MySQL - Как заказать строки из разных таблиц?
Пользователь "одело может добавить любое количество любого элемента (ов) в свой список покупок и изменить порядок перед отправкой. Я пытаюсь найти лучший способ сохранить эту информацию в том порядке, в котором они были отправлены, чтобы я мог легко/эффективно отображать ее на экране позже.
В настоящее время таблицы товаров (сладости, книги, одежда) хранят идентификатор shopping_list и позицию заказа, которая увеличивается, когда я просматриваю каждый элемент shopping_list и вставляю его в соответствующую таблицу.
Таблицы элементов имеют совершенно разные структуры с определенными предметными полями.
Так что я мог бы в конечном итоге с чем-то вроде:
shopping_list
ID: 1 UserId:123
сладости
ID: 1 ListId: 1 Order: 1 Flavour: 'Strawberry' Colour: 'Red'
ID: 2 ListId: 1 Order: 4 Flavour: 'Cola' Colour: 'Brown'
книги
ID: 1 ListId: 1 Order: 3 Name: 'MySQL for Dummies' Author: 'Joe Bloggs'
одежда
ID: 1 ListId: 1 Order: 2 Type: 'Hat' Size: 'Large'
Единственный способ, который я нашел, чтобы выбрать эти данные в правильном порядке, до сих пор является UNION три SELECTS из таблицы элементов и ORDER BY поле общего «порядка», но с уникальными полями в каждой таблице (15-20 за таблицу), я должен был бы SELECT много полей NULL каждый раз, чтобы соответствовать количеству столбцов.
т.е.
SELECT Id, Order, Flavour, Colour, NULL, NULL, NULL, NULL FROM sweets WHERE ListId=1
UNION
SELECT Id, Order, NULL, NULL, Name, Author, NULL, NULL FROM books WHERE ListId=1
UNION
SELECT Id, Order, NULL, NULL, NULL, NULL, Type, Size FROM clothes WHERE ListId=1
ORDER BY Order
Это, очевидно, меньше пример .... Для того, чтобы сделать эту работу на моих реальных таблицах, я должен написать NULL около 20 раз на каждый выбор. Неужели я об этом совершенно не так?
Заранее благодарим за любую помощь.