I`ve получили следующую таблицу в MySQLMysql дерево траверсы и сосчитать
id|top_id|amount
1 NULL 2
2 NULL 8
3 NULL 4
4 3 7
5 2 8
6 2 4
7 5 5
8 7 1
9 6 6
10 8 6
Для первых 3 идентификаторов мне нужно суммировать все количество его наследников, чтобы получить следующее:
id | amount
1 8
2 32
3 11
Я предполагаю, что должны быть соединения, но, к сожалению, я не могу получить рабочий запрос mysql. Может кто-нибудь мне помочь?
UPD: В PHP У меня есть следующий запрос:
$tops = $mysqli->query('SELECT * FROM table WHERE top_id IS NULL')
, который, очевидно, возвращает меня только 3 верхних идентификаторов и их простые суммы (2, 8 и 4 соответственно). Вместо 2, 8 и 4 мне нужно получить 12, 28 и 11, и это проблема ((
Если у вас есть установленный предел, как «глубоко» ваше дерево может идти, вы не можете сделать это с помощью простого MySQL. MySQL не поддерживает рекурсивные запросы. вы можете подделать для определенной глубины с помощью самосоединений, но произвольная глубина в принципе невозможна без использования внешних циклов в клиентском коде. –
Итак, варианты включают: объединение таблицы в себя так часто, как это может потребоваться, построение sproc для обработки рекурсия, используя некоторый внешний код t o обрабатывать рекурсию; изменение модели данных (к вложенному набору, скажем) – Strawberry
Мне это нужно для PHP-кода. Может быть, есть идеи использовать рекурсивный запрос там? – Jack