Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не слишком ли намудрил с запросом, LEFT OUTER JOIN ? / 3 сообщений из 3, страница 1 из 1
01.10.2018, 16:51
    #39711081
Не слишком ли намудрил с запросом, LEFT OUTER JOIN ?
Добрый день, коллеги!
Хотел уточнить. не слишком намудрил с запросом?
Вот запрос:
Код: php
1.
SELECT op.id, op.name, oic.option_id FROM options op LEFT OUTER JOIN options_in_cat oic ON oic.cat_id = 26 AND oic.option_id=op.id ORDER BY op.sort ASC, op.name ASC



В таблице options хранятся названия опции.
В таблице options_in_cat хранятся привязки опции к категории.
Цель - показывать при редактировании категории вместо длинного списка опции только те, которые назначены.
Например, детские размеры - это цифры от 98 до 158, женские размеры - это уже от 42 до 52 плюс буквенный индекс типа XXL.

Указанным выше запросом я собираюсь получить данные для страницы настройки, где будут выводиться все опции и тут же выделять опции, которые уже назначены для выбираемой тут же категории (через oic.cat_id = 26). Запрос отрабатывает правильно, но мне кажется, слишком сложный, не?

На рисунках:
диаграмма БД
скриншот табличек
скриншот ответа


таблица options
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
--
-- Структура таблицы `options`
--

CREATE TABLE IF NOT EXISTS `options` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `sort` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `options`
--

INSERT INTO `options` (`id`, `name`, `sort`) VALUES
(1, '110', 23),
(2, '116', 24),
(3, '122', 25),
(4, '128', 26),
(5, '134', 27),
(6, '140', 28),
(7, 'XS(42) ж', 101),
(8, 'S(44) ж', 102),
(9, 'M(46) ж', 103),
(10, 'L(48) ж', 104),
(11, 'XL(50) ж', 105),
(12, 'S(46)', 201),
(13, 'M(48)', 202),
(14, 'L(50)', 203),
(15, 'XL(52)', 204),
(16, 'XXL(54)', 205),
(17, '98', 21),
(18, '104', 22),
(19, '146', 29),
(20, '158', 30),
(21, '158', 31),
(44, 'XXXL(56)', 206);

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `options`
--
ALTER TABLE `options`
  ADD PRIMARY KEY (`id`);



таблица options_in_cat
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
--
-- Структура таблицы `options_in_cat`
--

CREATE TABLE IF NOT EXISTS `options_in_cat` (
  `id` int(11) NOT NULL,
  `option_id` int(11) NOT NULL,
  `cat_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `options_in_cat`
--

INSERT INTO `options_in_cat` (`id`, `option_id`, `cat_id`) VALUES
(1, 1, 13),
(2, 2, 13),
(3, 3, 13),
(4, 4, 13),
(5, 5, 13),
(6, 6, 13),
(7, 17, 13),
(8, 18, 13),
(9, 19, 13),
(10, 20, 13),
(11, 21, 13),
(12, 12, 26),
(13, 13, 26),
(14, 14, 26),
(15, 15, 26),
(16, 16, 26);

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `options_in_cat`
--
ALTER TABLE `options_in_cat`
  ADD PRIMARY KEY (`id`);

...
Рейтинг: 0 / 0
01.10.2018, 17:51
    #39711132
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не слишком ли намудрил с запросом, LEFT OUTER JOIN ?
авторВ таблице options хранятся названия опции.
В таблице options_in_cat хранятся привязки опции к категории.
Цель - показывать при редактировании категории вместо длинного списка опции только те, которые назначены.
Например, детские размеры - это цифры от 98 до 158, женские размеры - это уже от 42 до 52 плюс буквенный индекс типа XXL.

Запрос с LEFT JOIN не фильтрует по правой таблице (в данном случае options_in_cat)

Поэтому как-то странно читать
авторпоказывать ... вместо длинного списка опции только те, которые назначены.

Нет, будут показываться все options .

авторЗапрос отрабатывает правильно, но мне кажется, слишком сложный, не?

Никаким образом данный запрос не является сложным.
...
Рейтинг: 0 / 0
01.10.2018, 18:52
    #39711199
Не слишком ли намудрил с запросом, LEFT OUTER JOIN ?
MasterZiv,

но я же на скриншоте показал работающий вывод - там выводится именно как надо - вся таблица options и часть таблицы options_in_cat!
???
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не слишком ли намудрил с запросом, LEFT OUTER JOIN ? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]