MySQL - дерево запросов данных?

У меня есть такой набор данных в базе данных MySQL, но это около 50 000+ записей.

A01                   Description
A01.01                Description
A01.02                Description
A01.03                Description
A01.03.01             Description
A01.03.02             Description
A01.03.02.01          Description
A01.03.03             Description
A02                   ....
A02.01
A03
B01
B02
B02.02
B02.03
...

Я хотел бы сделать запрос, в котором я мог бы передать что-то вроде "A", которое дает мне всех дочерних элементов, но только на один уровень в глубину, поэтому я получаю A01, A02, A03, но мне также нужно знать, что A01 и A02 детей и А03 нет.

Мне нужно будет повторить запрос с передачей «A01.03», чтобы получить дочерние элементы A01.03 и знать, что у A01.03.02 есть дочерние элементы, а у других - нет.

У меня есть база данных, насчитывающая около 50 000+ из них, и мне нужно эффективно запрашивать ее по запросу. Я, наверное, могу немного изменить структуру или добавить флаги, если нужно.

Будем признательны за любые советы или идеи! Спасибо!

A03 не имеет детей.
Gordon Linoff 18.03.2018 20:41

ой, имею ввиду A01.03 детей. Буду редактировать.

Andrew T 18.03.2018 21:09
Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понимаю, вы можете:

select substring_index(t.col1, '.', 1),
       ( count(*) > 1 ) as has_children
from t
where t.col1 like 'A%'
group by substring_index(t.col1, '.', 1);

Спасибо, я сильно над этим подумал. Я ценю его. Это приведет меня туда, куда мне нужно. Для справки для кого-либо еще, можно сделать LIKE 'A01.%' И увеличить номер группы substring_index для запроса подпунктов, таких как A01, и не показывать фактический результат A01!

Andrew T 18.03.2018 21:30

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