У меня есть система, в которой пользователь может просматривать категории, на которые он подписан индивидуально, а также те, которые доступны по умолчанию в регионе, к которому он принадлежит.
Итак, таблицы таковы:
категории
UsersCategories
RegionsCategories
Я запрашиваю базу данных для всех категорий в своем регионе, а также для всех отдельных категорий, на которые они подписаны.
Мой запрос выглядит следующим образом:
Select * FROM (categories c)
LEFT JOIN users_categories uc on uc.category_id = c.id
LEFT JOIN regions_categories rc on rc.category_id = c.id
WHERE (rc.region_id = ? OR uc.user_id = ?)
По крайней мере, я считаю, что это запрос, я создаю его, используя слой ORM в Cake, поэтому точный:
$conditions = array(
array( "OR" => array (
'RegionsCategories.region_id' => $region_id,
'UsersCategories.user_id' => $user_id
)
));
$this->find('all', $conditions);
Это оказывается невероятно медленным (иногда около 20 секунд или около того. Каждая таблица имеет около 5000 строк). Мой дизайн виноват здесь?
Как я могу получить как отдельные категории пользователей, так и категории в своем регионе, все в одном запросе, без возрастов?
Спасибо!