Вам нужна только одна таблица для ваших категорий; просто установите для поля parent_id
значение null для категорий верхнего уровня.
Что касается фактической генерации HTML, вы можете сделать что-то в этом направлении (псевдокод), где $category_data
- это результаты запроса в двумерном массиве, а $category_id
- идентификатор создаваемой родительской категории , Чтобы начать, используйте $category_id = 0
function print_category($category_data, $category_id)
{
print "<ul>";
foreach ($category_data as $category)
{
if ((integer)$category['parent_id'] == $category_id)
{
print "<li>" . $category['category_name'] . "</li>";
print_category($category_data, $category['id']);
}
}
print "</ul>";
}
Вам придется изменить это для вашего собственного макета и структуры таблицы. Вы можете улучшить производительность (если у вас огромное количество категорий), преобразовав массив в трехмерный массив $category_data[parent_id][id][category_row]
.