Как правильно вывести подкатегории?

Есть вот такая таблица: 3-etdfydak.jpg
Мне нужно вывести все категории так, чтобы получилось что-то вроде этого:
Категория 1
Категория 2
Категория 3
--подскатегория третьей
----подскатегория четвертой
И, собственно, вот как я это делаю:
$r - mysql_query("SELECT `id`,`name`,`parent` FROM `category` WHERE `parent` = 0"); // берем категории, которые явно не "подкатегории"
while($w = mysql_fetch_assoc($r)){
	echo $w['name'];
	$r2 = mysql_query("SELECT * FROM `category` WHERE `parent` = {$w[id]}"); // вытягиваем все подгатегории полученной категории
	if(mysql_num_rows($r2) > 0){
		while($w2 = mysql_fetch_assoc($r2)){
			echo '--'.$w2['name'];
		}
	}
}

Это явно ресурсоемкая операция, если учитывать то, что подкатегорий может быть сколько угодно и категорий тоже, а у каждой категории или подкатегории могут быть свои. Получается очень много азпросов.
Что можно придумать менее сложное для базы?
  • Вопрос задан
  • 361 просмотр
Пригласить эксперта
Ответы на вопрос 3
Immortal_pony
@Immortal_pony Куратор тега PHP
Хранить связи в отдельной таблице например.
Называется такой шаблон проектирования "closure table", подробно описан здесь - habrahabr.ru/post/193166

PS
И, собственно, вот как я это делаю:

Использование однобуквенных переменных, использование функций mysql_*, использование отступов в два пробела, смешение запросов к БД и вывода данных - это, чего в коде быть не должно никогда. Я не знаю, какой источник вы используете для получения знаний о програмировании на PHP, но знайте - он устарел минимум на 10 лет.
Ответ написан
Therapyx
@Therapyx
Data Science
Все правильно говорит Иммортал. Такие вещи должны разбиваться при планировке базы. Таблица Категорий, таблица подкатегорий и делать легкие запросы через JOIN.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Храните дерево категорий в Nested Set, тогда его вывод будет намного проще.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы