Рекурсивный sql в mysql

У меня 2 стола category и orderrows

Структура таблицы категорий

id  name  parent_id
1   c1    null
2   c2   null
3   c3    2
4   c4    1
5   c5    2
6   c6    5
7   c7    5

Структура таблицы заказов

id  category  amount
1     1         100
2     6         100
3     5         100
4     4         100
5     3         100
6     2         100
7     7         100
8     2         100

Я пытаюсь присоединиться к 2 таблицам, чтобы получить общую сумму только на родительском уровне

Результат:

category  total
1         200
2         600

Есть ли способ написать sql в MySQl для получения результата.

Результаты в основном получают все отношения между родительскими и дочерними элементами и выводят общую сумму только на родительском уровне.

В MySQL 8.0 да. В MySQL 5.x вам не повезло.

The Impaler 31.05.2018 17:28

В MySQL 5.5+ есть метод @TheImpaler из-за пользовательских переменных, но он довольно хитрый stackoverflow.com/questions/20215744/…

Raymond Nijland 31.05.2018 17:30

@Raymond: если он не использует переменные. Их сложно писать и отлаживать. К тому же эти запросы очень неэффективны для больших наборов строк.

The Impaler 31.05.2018 17:31

@TheImpaler Нет, это не так. Кроме того, это не было сутью вашего первоначального аргумента - я согласен, что версия 8.0 значительно упростила этот процесс.

Strawberry 31.05.2018 17:35

@Strawberry Не хочу здесь начинать «религиозную войну», но нет способа установить «условие остановки» при использовании переменных. Вы во власти строк таблицы.

The Impaler 31.05.2018 17:37

«Плюс эти запросы очень неэффективны для больших наборов строк». В MySQL 5.5 / 5.7 я бы предпочел использовать пользовательскую переменную MySQL для имитации ранжирования (ROW_NUMBER()), а затем связанный подзапрос с COUNT () для больших наборов данных, чтобы дать вам пример .. @ TheImpaler "Их сложно писать и отлаживать" Это правда, что вам нужно знать, как их писать и правильно использовать, если вы знаете, как они работают. Это похоже на запись (1 + 1) AS alias.

Raymond Nijland 31.05.2018 18:06
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
7
36
0

Другие вопросы по теме