2014-10-20 5 views
0

Представьте меня есть база данных с четырьмя таблицами: «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 раз на каждый выбор. Неужели я об этом совершенно не так?

Заранее благодарим за любую помощь.

ответ

0

Возможно, вы ошибаетесь, да. У вас должна быть дополнительная таблица, которая содержит место элемента в списке покупок и поле, которое представляет, где хранится дополнительная информация для этого поля. Это позволит вам запрашивать порядок вещей, а затем выбрать другую информацию (если нужно) из других таблиц.

Прямо сейчас вы разбросали информацию, которая принадлежит вместе в 3 разных таблицах, поэтому у вас проблемы с ее сортировкой.

Смежные вопросы