Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2012, 11:01   #1
Zohei
Пользователь
 
Регистрация: 29.04.2010
Сообщений: 13
По умолчанию Сложная сортировка товаров с учетом вложенности категорий

Подскажите как правильнее реализовать сортировку товаров с учетом вложенности категорий

Есть древовидный список разделов различной вложенности типа

-Все категории
---Апельсины
------Сливы
---Яблоки
------Груши
------Ананасы
...

Если группировать по имени категорий, то продукты выводятся как :
Ананасы
Апельсины
Груши
Сливы
Яблоки

А должны сортироваться с учетом вложенности категорий :
Апельсины
Сливы
Яблоки
Ананасы
Груши

Запросами в цикле сделать можно, но хочется по человечески)
Zohei вне форума Ответить с цитированием
Старый 04.02.2012, 11:13   #2
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

я в Firebird делал
http://ibaseforum.ru/viewtopic.php?f=4&t=5411

собственнно нужно отсортировать одну таблицу, согласно положению записей в другой
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 04.02.2012, 12:34   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Zohei
Было и у меня подобное по деталям машин.Показывай структуру базы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.02.2012, 13:50   #4
Zohei
Пользователь
 
Регистрация: 29.04.2010
Сообщений: 13
По умолчанию

Korben5E, спасибо за наводку, попробуем разобраться

Цитата:
Сообщение от Stilet Посмотреть сообщение
Было и у меня подобное по деталям машин.Показывай структуру базы.
в общих чертах
Код:
Categories:
key; category_name; category_id; parent_id

Product_Category:
key; category_id; product_id

Products:
key; product_id; product_name
на самый крайний случай структуру можно и поменять конечно
Zohei вне форума Ответить с цитированием
Старый 04.02.2012, 13:59   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT C.category_name,P.product_name
  FROM Categories C,Product_Category PC,Products P
  WHERE C.category_id=PC.category_id AND PC.product_id=P.product_id
  ORDER BY C.category_name,P.product_name
По структуре: если продукт входит только в одну категорию, то Product_Category не нужна
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2012, 14:13   #6
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от Zohei Посмотреть сообщение

в общих чертах
Код:
Categories:
key; category_name; category_id; parent_id

Product_Category:
key; category_id; product_id

Products:
key; product_id; product_name
на самый крайний случай структуру можно и поменять конечно
я бы 2мя таблицами обошелся - Categories и Products, их вполне достаточно

и запрос стал-бы таким:
select p.* from Products p
left join Categories c on c.category_id=p.product_id
order by c.category_name, p.product_name
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 04.02.2012, 14:41   #7
Zohei
Пользователь
 
Регистрация: 29.04.2010
Сообщений: 13
По умолчанию

Аватар, Korben5E
В том то и дело, используя ваш способ, вложенность не учитывается...

Как я уже приводил пример выше... имея такую структуру :
Код:
id| name |parent
0-Все категории  
1---Апельсины  0
2------Сливы  1
3---Яблоки  0
4------Груши  3
5------Ананасы  3
...
результат при ORDER BY C.category_name,P.product_name
сортировка будет по алфавиту без учета вложенности категорий...
Код:
5-Ананасы
1-Апельсины
4-Груши
2-Сливы
3-Яблоки
А мне в результате надо получить такую сортировку продуктов:
Код:
1-Апельсины  0
2---Сливы   1
3-Яблоки    0
5---Ананасы   3
4---Груши    3

Последний раз редактировалось Zohei; 04.02.2012 в 14:50.
Zohei вне форума Ответить с цитированием
Старый 04.02.2012, 14:51   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Т.е. parent_id из Categories указывает на родителя в той же таблице? И какова глубина вложенности?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2012, 15:49   #9
Zohei
Пользователь
 
Регистрация: 29.04.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Т.е. parent_id из Categories указывает на родителя в той же таблице?
да
Цитата:
И какова глубина вложенности?
глубина небольшая. сейчас до трех уровней, 4 может максимум будет
Zohei вне форума Ответить с цитированием
Старый 04.02.2012, 15:52   #10
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от Zohei Посмотреть сообщение
Аватар, Korben5E
В том то и дело, используя ваш способ, вложенность не учитывается...

Как я уже приводил пример выше... имея такую структуру :
Код:
id| name |parent
0-Все категории  
1---Апельсины  0
2------Сливы  1
3---Яблоки  0
4------Груши  3
5------Ананасы  3
ты не сообщил какой тип БД у тебя, от этого зависит вариант реализации

я у себя делал это так(Firebird)
1. - ключ
2. - код родителя
3. - наименование

потом написал хранимую процедуру которая рекурсивно формирует список ключей и к получившемуся набору данных подсоединял необходимые таблицы, это необходимо в 2х случаях

1. формирование самого дерева
2. привязка дочернего списка к выделенному элементу

С 3мя таблицами как у тебя не получится - потому что в 1 поле результирующего выбора, тебе надо засунуть данные из 3х таблиц,
геморрой с union по моему это не решит.
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложная сортировка в ListView Puhovoi Помощь студентам 0 02.01.2012 12:38
Простая и сложная сортировка - какие используются? paravoz1k Помощь студентам 1 02.04.2011 13:32
Сложная сортировка. Как сделать? valerik88 SQL, базы данных 1 27.02.2011 13:45
Сложная сортировка Aleksiyfenix Microsoft Office Excel 2 24.08.2010 22:07
Сложная сортировка массива данных april115582 Microsoft Office Excel 2 13.05.2010 17:38