- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
public function getAllParentCategories($category_id,&$parents = array()) {
$parent_id = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$category_id . "'")->row['parent_id'];
if ($parent_id == 0)
return $parents;
else {
$parents[] = $parent_id;
return $this->getAllParentCategories($parent_id,$parents);
}
}
но пыхобляди продолжают плакать и жрать свой вонючий мускул
https://www.sitepoint.com/hierarchical-data-database-2/
просто пыхобляди так не умеют
ещё скажи, что теперь обновлять его нельзя, потому что пыхомускулоблядь проставила свои какие-то никчемные чиселки, и "перебалансировка" приведет к разрыву жоп?
на что только не пойдут пыхопитушки, лишь бы постгрес не ставить, я хуею
это просто такой способ хранить деревья в реляционках, оптимизированный на быстрое чтение.
ну вообще в нормальных субд конечно есть и XML и деревья и чо хош
а пыховцам от мускуля никуда нельзя
у них без него вордпресс не запускается
теперь вставь ноду дочернюю, скажем, к Red, и получи удовольствие обновить значение rgt для всей таблицы
имхо даже способ, когда ты в идентификаторе записи кодируешь всё её наследие (так, к примеру, успешно работает огромная куча классификаторов) и то проще как для поиска наследников, так и поиска родительских элементов, и обновлять будет только себя, и хранить в записи ненамного больше
т.е. если на пальцах - хранить для записи id_path = '1/14/01/3', который и четко расскажет место в иерархии, и легко позволит поискать детей как тех, у которых их id_path начинается с '1/14/01/3/', саму же колонку правильно поиндексировать
И чо? В materialized path, про который Ди выше пишет, внезапно, тоже.
https://openquery.com.au/graph/doc
OQGRAPH поставляется в коробке с MariaDB.
реализация, где у тебя принципиально разные вещи происходят, если ты для одного и того же запроса указываешь latch=0, latch=1, latch=2 вкупе с другими колонками или без или не указываешь - это какой-то маразм, неужто нельзя было функциями решить, ну или хотя бы имена
Могли бы сделать по-другому: вместо виртуального latch во WHERE множить таблицы (например, дописывая к имени таблицы суффикс 0, 1, 2). Но это уже как-то некрасиво.
А как это решить функциями: DIJKSTRA(linkid), BREADFIRST(linkid) etc.?
http://dev.mysql.com/doc/internals/en/custom-engine.html
Они реализовали граф как плагин хранилища. Это позволяет перехватывать обращения к виртуальной таблице, но не позволяет вносить изменения в язык.