Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день. Ваш форум запомнился доброжелательностью и отзывчивостью.
У меня такой вопрос, на который я не смог построить запрос.
Итак есть две таблицы, одна категория товара, другая сам товар. Это для примера.
В таблице категории не просто id, name прописаны, но так же и есть поле section в которое я могу записать id из этой же таблицы - что означает мастер категория.
Например у нас есть
id, section, name
1, 0, Электроника
2, 0, Бытовая техника
3, 2, Для кухни
В третей записи мы видим - section = 2 что означает что Бытовая техника является для категории "для кухни" родителем. Тем самым строя каталог товаров я могу отобразить все подразделы данного раздела выбрав их по полю section
Итак вопрос.
Есть вторая таблица с товарами
Например
id, cat, desc
1, 1, test
2, 1, test 2
3, 3, test 3
Если бы первая таблица категорий товаров была бы без поля section тоесть категории были бы только одномерные и товары четко привязывались только к этим так сказать корневым разделам то запрос на построение категорий товаров был бы таким:
Select id, name FROM tbl1 WHERE tbl1.id = tbl2.cat
Тем самым мы бы исключили отображение "пустых" категорий в которых товара нет.
Подскажите как по такому же принципу построить запрос отобразив все категории товаров, если даже в самой категории ничего может быть и нет, как у нас в примере видно что в категории "Бытовая техника" нет товаров, но в ней есть субкатегория "Для кухни" в которой уже есть товар.
Надеюсь написал мысли доходчиво, благодарю за ваше время и помощь.
Неактивен
Неактивен
vasya написал:
Select tbl2.id, tbl2.name FROM tbl1,tbl2 WHERE tbl1.id = tbl2.cat or tbl1.id = tbl2.section;
У нас в tbl2 нет section. Section только в первой таблице.
Неактивен
В tbl2 у нас только id(порядковый), cat (к какой категории привязка), desc (описание).
В tbl1 у нас id (порядковый), section (id родителя из тойже таблицы, может быть пустым так как не все категории относятся к каким то категориям выше), name (имя категории).
Отредактированно батарейка (08.08.2012 16:54:12)
Неактивен
Тогда:
Неактивен
Извиняюсь что не ответил сразу.
Начиная пробовать ваш запрос понял что он тоже к сожалению не куда не годится. Я не думаю что то что я описал можно запросить таким простым запростом.
"OR tbl2.id = tbl1.section;" - в tbl2 - id это все лишь порядковый номер товара, и он ни в какой степени не причастен к записи в tbl1.section.
В tbl1.section могут быть айди от tbl1.id - тоесть той-же таблицы показывая что этот раздел например 5 находится в разделе 3, тогда запись была бы id, name, section = {5, "комбайны", 3} - Где section=3 является записью из тойже таблицы под айди 3. id, name, section = {3, "изделия для полей", 0}. В данной записи поле section=0 тоесть этот раздел ни где не находится и является корневым.
Так просто можно построить вложенную до бесконечности структуру иерархическую. Но потом конечно уже сложнее сделать запросто чтоб выбрать все корневые разделы в субразделах которых лежат товары.
Я думал что такое можно сделать через Join left но у меня чтото ничего не получилось нормального.
Неактивен
вместо
OR tbl2.id = tbl1.section;
нужно
OR tbl2.cat = tbl1.section;
батарейка написал:
Так просто можно построить вложенную до бесконечности структуру иерархическую. Но потом конечно уже сложнее сделать запросто чтоб выбрать все корневые разделы в субразделах которых лежат товары.
Данный запрос будет выбирать корневые разделы только для одного уровня вложенности.
Рекомендую посмотреть http://webew.ru/articles/2080.webew
Неактивен
Благодарю за помощь!
Неактивен