связанные таблицы со многими уровнями

0

Я пытаюсь сделать меню со следующей структурой:

-category 1
--category 1.1
---category 1.1.1
----product 1
----product 2
----product 3
-category 2
--category 2.1
---category 2.1.1
----product 1
----product 2
----product 3
-category 3
--category 3.1
---category 3.1.1
----product 1

У меня есть такая схема, как wordpress:

Таблица

relation_category_products хранит идентификатор из категории и идентификатора из продуктов. Вопрос в том, что лучший способ сделать запросы mysql для всей структуры? Моим первым решением было создание запросов для родительской категории (-категория), затем для каждой строки возьмите идентификатор для следующей -категории, а затем доподнимите продукт node. Но с этим tecnique theres много запросов (35 на данный момент). И я не знаю, что лучший способ получить все эти отношения и взять его с php для визуализации меню.

спасибо

Теги:

2 ответа

1
Лучший ответ

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

В вашей структуре таблицы должно быть поле для родителя, например.

Таблица "category"

id(int)  name            parent(int)
   1     Category 1 
   2     Category 1.1     1
   3     Category 1.1.1   2
   4     Category 2       
   5     Category 2.1     4

Затем вы используете отношения "один ко многим" в вашей таблице "Продукт", чтобы связать их с категорией.

Если вы хотите получить узлы непосредственно под категорией, просто выберите "SELECT" в поле "parent".

Если вы хотите получить все дерево, используйте запрос соединения:

SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.id
LEFT JOIN category AS t3 ON t3.parent = t2.id

Это вернет вам что-то вроде:

+-------------+----------------------+---------------+
| lev1        | lev2                 | lev3          |
+-------------+----------------------+---------------+
| Category 1  | Category 1.1         | Category 1.1.1|
| Category 2  | Category 2.1         | NULL          |
+-------------+----------------------+---------------+
  • 0
    Большое спасибо!!!
  • 0
    Статьи по иерархическим данным тоже было действительно понятно
Показать ещё 2 комментария
0

Вы можете использовать leftjoin, а затем закодировать массив с помощью foreach убедитесь, что вы правильно их группируете и используете основной столбец alt. индексированный для лучшей производительности, есть хорошее руководство для этого здесь

рассматривает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню