2015-01-29 4 views
-2

У меня есть таблица категории, как это:категории Заказ и подкатегорий в одной таблице

categories: id, name, parent_id 

Как я могу заказать категории?

Пример:

Men 
     Top 
      Shirts 
      Tshirts 
     Bottom 
      Jeans 
Women 
     Top 
      Jackets 
      Tshirts 
     Bottom 
      Jeans 
Accessories 
     Belt 
     Cap 
+0

Я хочу заказать категории, как в образец. Не могли бы вы написать предложения sql? – efendi

+0

Рекомендуемое чтение: [Самый эффективный/элегантный способ разобрать плоский стол в дереве?] (Http://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way- to-parse-a-flat-table-in-a-tree), [Найти наивысший уровень иерархического поля: с vs без CTE] (http://dba.stackexchange.com/questions/7147/find-highest- уровень иерархического поля-с-vs-без-ctes) – RandomSeed

+1

Как правило, проблемы отображения данных будут обрабатываться на уровне презентации. – Strawberry

ответ

0

Вы, вероятно, нужно сделать это с помощью рекурсии, например, что-то вроде этой хранимой процедуры ...

DELIMITER // 
CREATE PROCEDURE PrintHierachy 
(IN parentId DECIMAL(19, 0), IN indent VARCHAR(1000)) 
BEGIN 
    DECLARE itemName VARCHAR(255); 
    DECLARE childId DECIMAL(19, 0); 
    DECLARE csr CURSOR FOR 
     SELECT id 
     FROM MY_TABLE 
     WHERE parentId = parentId 
     ORDER BY NAME; 

    IF parentId > 0 THEN 
     SELECT itemName INTO FROM MY_TABLE WHERE id=parentId; 
     % Print it 
     SELECT concat(indent, itemName); 
    END IF; 

    OPEN csr; 

    child_loop: LOOP 
     FETCH csr INTO childId; 

     IF done THEN 
      LEAVE child_loop; 
     END IF; 
     % Recurse 
     CALL PrintHierachy(concat(' '), childId); 
    END LOOP; 

    CLOSE csr; 
END; 

Это предполагает, что верхний уровень имеет родительские идентификаторы " 0" .

например. ВЫЗОВ PrintHierachy («», 0)

(я не использовал сохраненные проки в MySQL раньше, но есть в других СУБД так что простите меня, если это не компилируется!)

+0

^Это будет упорядочивать вещи только в алфавитном порядке! Если вы хотите, чтобы «Мужчины» появлялись над «Женщины» и «Принадлежности», вам может понадобиться таблица или другой столбец, в котором хранится этот заказ ... – BretC

+0

И я согласен с вышеприведенным комментарием, что такие вещи должны быть сделаны в презентации слой!! – BretC

Смежные вопросы