2010-05-05 2 views
0

У меня есть отношение базы данных mysql. и я хочу вытащить все данные для одного элемента из основной строки и всех реляционных данных (т. е. нескольких связанных строк) в одном запросе. Какой самый простой/лучший способ сделать это за исключением нескольких операторов JOIN в одном запросе?MySQL - Доступ ко всем реляционным данным в одном запросе

Ниже приведены таблицы и запросы, используемые в настоящее время.

реляционные данные

------------------------------------------------------------------------------------------------------------------------------ 
| value_id | value_site_id | value_field_set_id | value_field_setting_id | value_parent_id | value_parent_type | value_value | 
------------------------------------------------------------------------------------------------------------------------------ 

Первичная Таблица

----------------------------------------------------------------------- 
| item_id | item_site_id | item_country_id | item_category_id | etc etc 
----------------------------------------------------------------------- 

и запрос

SELECT fs.field_variable_name, fs.field_type, fv.value_value, fv.value_parent_id 
FROM T_field_values AS fv 
    INNER JOIN T_field_settings AS fs ON fv.value_field_setting_id=fs.field_id 
WHERE fv.value_parent_type=:type && 
    fv.value_parent_id=:id; 
+0

Можете ли вы показать пример таблиц, которые вы запрашиваете? или некоторые из ваших текущих SQL? – Jamey

+0

Вопрос обновлен. – buggedcom

ответ

2

Б наилучшим способом является использование нескольких статей JOIN, по одному для каждой связи.

Не бойтесь JOIN. Это стандартная практика.

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

Запрос JOIN будет легче читать.

EDIT

Я вижу, у вас есть форма таблиц EAV. Ваш случай немного сложный, и без полной структуры (T_field_settings отсутствует) и некоторых выборочных данных я не буду пытаться предоставить точный запрос, но взгляните на мой предыдущий ответ здесь, на том, как использовать self join для получения результатов из таблицы EAV. Это должно заставить вас идти по правильному пути.

+0

Я только сказал, что не присоединяюсь, потому что это может быть до 'n' частей данных без ограничений. – buggedcom

+0

@buggedcom, я расширил свой ответ, потому что вы также можете использовать подзапросы. Если вы предоставите более подробную информацию, мы можем привести примеры. Это не будет неограниченным. У вас не может быть больше объединений, чем строк. –

+0

Вопрос обновлен. – buggedcom

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