Задать вопрос
@kamtm

Как оптимизировать SELECT к двум таблицам?

Здравствуйте!
У меня есть таблица Модели и таблица Разделы

Таблица Модели (model)
id name cat
1 Corolla 2
2 Camry 2
3 VFR800 5

Таблица Разделы (cat)
id name sub_id
1 Авто 0
2 Седаны 1
3 Универсалы 1
4 Мотоциклы 0
5 Спортивные 4

В таблице Разделы, есть разделы с cat.sub_id=0 (Главные разделы) и cat.sub_id=cat.id (Подразделы Главного раздела)

Необходимо:
1. На странице Родительского раздела вывести все модели и название Родительского раздела.
2. На странице Подраздела вывести модели относящиеся к Подразделу и название Подраздела.

Решение: (id нам известно, оно может только одно, для главного раздела, или для подраздела)
Пример 1
select model.name, (select cat.name where cat.id=1) as catname
from model,cat
where model.cat in (select cat.id from cat where cat.id=1 or cat.sub_id=1)
and model.cat = cat.id

Выведет Авто и модели Corolla, Camry
Пример 2
select model.name, (select cat.name where cat.id=2) as catname
from model,cat
where model.cat in (select cat.id from cat where cat.id=2 or cat.sub_id=2)
and model.cat = cat.id

Выведет Седаны и модели Corolla, Camry

Эти запросы работают, но меня смущают подзапросы. Это хороший вариант или есть более красивое решение?
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
В WHERE подзапрос действительно не нужен:
SELECT m.name, (SELECT name FROM cat WHERE id = 2) AS catname
FROM model m
INNER JOIN cat c ON m.cat = c.id
WHERE c.id = 2 OR c.sub_id = 2

Но не проще ли сделать два разных запроса: для имени категории и для списка моделей?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
18 дек. 2024, в 11:03
5000 руб./за проект
18 дек. 2024, в 10:44
130000 руб./за проект
18 дек. 2024, в 10:02
7000 руб./за проект