dzheka3d
@dzheka3d

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

Всем привет! Есть у меня такая таблица в базе:
5d363ec368e04c68bedb29ab18d7301a.jpg
Например, я обращаюсь к категории с id = 7 (венера). Чтобы взять родительскую категорию для этой катгеории, мне нужно выполнить запрос SELECT * FROM `category` WHERE `id` = 6
Но как вытащить все родительские категории (я не знаю сколько их), а именно чтобы получилась цепочка (венера -> планеты -> космос -> наука )
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 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, как рекомендовали выше. Но выбор алгоритма должен исходить из условий конкретной задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы