Я пытаюсь сделать меню со следующей структурой:
-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 для визуализации меню.
спасибо
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 |
+-------------+----------------------+---------------+