MySQL - доступ ко всем реляционным данным в одном запросе - PullRequest
0 голосов
/ 05 мая 2010

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

Ниже приведены таблицы и запросы.

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

------------------------------------------------------------------------------------------------------------------------------
| 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;

1 Ответ

2 голосов
/ 05 мая 2010

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

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

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

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

EDIT

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

...