dzheka3d
@dzheka3d

Как вытащить все родительские записи в БД?

Всем привет! Есть у меня такая таблица в базе:
5d363ec368e04c68bedb29ab18d7301a.jpg
Например, я обращаюсь к категории с id = 7 (венера). Чтобы взять родительскую категорию для этой катгеории, мне нужно выполнить запрос SELECT * FROM `category` WHERE `id` = 6
Но как вытащить все родительские категории (я не знаю сколько их), а именно чтобы получилась цепочка (венера -> планеты -> космос -> наука )
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 2
DieZz
@DieZz
Насколько знаю, в mysql нельзя использовать рекурсивные запросы. Используйте nested sets, либо несколько запросов в цикле средствами языка на котором пишете.
Ответ написан
Комментировать
ivankomolin
@ivankomolin
Пример рекурсивной функции, с помощью которой можно получить дерево из плоского массива.

/**
	 * Формирует дерево
	 * @param arr $items
	 * @param int $parentId
	 * @return arr
	 */
	public function tree($items, $parentId = 0) {
		$tree = array();
		foreach($items as $item) {
			if ($item['parentId'] == $parentId) {
				$tree[$item['id']] = $item;
				$tree[$item['id']]['sub'] = $this->tree($items, $item['id']);
			}
		}

		return $tree;
	}


Лучше конечно использовать какой-нибудь алгоритм для хранения деревьев в бд. Их множество, один из них nested sets, как рекомендовали выше. Но выбор алгоритма должен исходить из условий конкретной задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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