Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Mizter Egoist 03.02.2016 17:30 / 03.02.2016 17:37
Почему ерунда?#Выборка родителя и его детей SELECT * FROM pages p JOIN path t ON (p.pID = t.dsc) WHERE t.anc = $param #Выборка ребенка и его родителей SELECT * FROM pages p JOIN path t ON (p.pID = t.anc) WHERE t.dsc = $paramПримерно понял как работает вывод дерева, хеш строится для того, чтобы сгруппировать всех предков в одного родителя, а в метод передается родитель для того, чтобы использовать его как ссылку, по которой будет происходить переход.
CREATE TABLE IF NOT EXISTS `path` ( `anc` INT NOT NULL, `dsc` INT NOT NULL, `lvl` INT NOT NULL, PRIMARY KEY(anc, dsc), FOREIGN KEY (anc) REFERENCES pages (pID), FOREIGN KEY (dsc) REFERENCES pages (pID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Минимум, это убрать FOREIGN KEY (anc) REFERENCES pages (pID)
SELECT p.*, h.anc AS parent FROM pages p JOIN path h ON p.pID = h.dsc LEFT JOIN path t ON (h.anc = t.anc AND t.lvl = 1)Результат будет следующим:
pID tID uID parent 97 1 7 97 107 1 7 107 117 1 7 97 127 1 7 117 137 1 7 127 147 1 7 127 147 1 7 137