Нужно выбрать из нескольких таблиц на основе записей в одной таблице - PullRequest
1 голос
/ 30 октября 2010

вот ситуация. У меня есть таблица с координатами карт, схема выглядит так:

map_coordinates:
item | item_id | latitude | longitude

Идея состоит в том, что эта таблица содержит список координат различных элементов, это может быть заметка, объявление, событие и т. Д. Я хочу иметь возможность настроить его, поэтому у меня есть набор результатов, как показано ниже:

item | name of item | latitude | longitude

Учтите, что все события, объявления и примечания находятся в отдельных таблицах. Как я могу установить это, так как мне нужно показать все координаты на картах Google вместе с названием элемента, т.е. если это объявление - заголовок объявления, событие, его заголовок и т. Д. Без необходимости сделать много SQL запросов.

У меня есть код, чтобы показать его на карте - мне просто нужно собрать детали как таковые. Или мне нужно переделать дизайн моей базы данных здесь?

========================

EDIT

На самом деле у меня есть несколько таблиц в моей базе данных, таких как заметки, объявления и события и т. Д. Дело в том, что элемент в таблице maps_coordinates относится к типу элемента, т.е. если его примечание или событие и item_id фактический идентификатор этого события. Я не хочу зацикливаться на использовании соединений здесь, потому что это потребует большого количества таблиц. Кроме того, мне просто нужно захватить основную информацию, как в заголовке, чтобы помочь заполнить карту, поэтому, когда я наводю курсор мыши на отдельные маркеры, мне не нужно совершать ajax-вызов, чтобы просто показать основную информацию об элементе на маркере.

Другие таблицы имеют свои собственные определения, но все они имеют похожее поле заголовка, и именно это поле заголовка я хочу показать в том же кортеже, что и координаты. Или я должен денормализовать мои таблицы здесь и иметь дубликат записи для заголовка и карты_координаты?

Ответы [ 3 ]

1 голос
/ 06 ноября 2010

Вы можете сделать это, создав представление, которое объединяет каждый из общих элементов из отдельных таблиц.В вашем примере заметки, объявления, события и т. Д.

CREATE VIEW viewCommonElements
AS

SELECT 
100      as DataType,
NoteId   as ElementId,
NoteName as ElementName
FROM Notes

UNION

SELECT 
200                as DataType,
Classified_Post_Id as ElementId,
Post_Description   as ElementName
FROM Classified_Posts

UNION

SELECT 
300                as DataType,
EventId            as ElementId,
EventName          as ElementName
FROM Events

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

Если позже создается новый элемент, просто измените представление и добавьте блок выбора объединения , предоставив ему уникальный тип данных .Вы можете использовать DataType, чтобы отличать различные общие элементы друг от друга.

Я использовал этот метод несколько раз для согласования разнородных, но общих данных.

0 голосов
/ 30 октября 2010

Вы говорите: «Идея в том, что эта таблица содержит список координат различных элементов, это могут быть заметка, объявление, событие и т. Д.» Значит ли это, что есть разные таблицы для разных предметов? Если это так, лучше всего подойдет денормализованная таблица со всей справочной информацией. Если нет, это просто вопрос объединения двух таблиц.

0 голосов
/ 30 октября 2010

Да, в основном ваш дизайн БД не очень хорош.Попробуйте это так:

map_coordinates:
item | item_id | item_type | item_name | latitude | longitude

и используйте таблицу поиска для item_types.

...