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

208
09 ноября 2017, 04:24

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

Таблица Модели (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

Эти запросы работают, но меня смущают подзапросы. Это хороший вариант или есть более красивое решение?

READ ALSO
Как получить результаты SQL запроса?

Как получить результаты SQL запроса?

Использую CodeigniterДобавляю строку в БД следующим запросом:

239
Сгруппировать запрос правильно

Сгруппировать запрос правильно

Требуется сгруппировать запрос sql по трем полям: ip, browser, user_id для статистики уникальных просмотровВозможно ли вообще методами sql исключить...

229
как конвертировать базу ms sql в mysql

как конвертировать базу ms sql в mysql

есть дамп бази даних ms sql файл somebak как конвертировать дание с файла в mysql в среде линукс

226
Вывод строк таблицы БД по массиву значений

Вывод строк таблицы БД по массиву значений

Как сформировать запрос, который выведет по две первые строки по sports, it и тд

234