Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли алтернатива „свързване чрез“ в MySQL?

Както беше казано в коментарите, няма кратък път с mysql.

НО!

Ако имате възможност да промените структурата на базата данни, можете да разгърнете по-добър дизайн за работа с дървовидни йерархии.

Ако следвате ТОЗИ ИНСТРУКЦИЯ от Бил Карвин (ТУК е оригиналният отговор, който препраща към урока за слайдшоу), можете да намерите 4 метода, използвани за моделиране на йерархична структура:

  1. Списък на Adiacency
  2. Изброяване на пътя
  3. Вложени набори
  4. Таблица за затваряне

Сега най-добрият възможен модел е 4-ият (оставям описания на другите 3 модела на читателя), който основно се нуждае от 2 таблици:една за елементите и една за пътеките. В таблицата с пътищата (самата таблица за затваряне) ще съхранявате всеки път от всеки възел до всеки потомък (не само преките деца!).

Препоръчва се да запазите и дължината на пътя за всеки ред, тъй като това улеснява заявката за непосредствени деца в дървото.

Дори ако това решение изисква повече пространство, то има най-добрата цялостна производителност и е наистина лесно за използване:изобщо не разчита на рекурсивни заявки И ще предостави референтна цялост за целия набор от данни!

Например, за да получите всяко дете на възел #4:

select a.*
from nodes a
join paths b
on a.node_id = b.descendant
where b.ancestor = 4

Друг пример:вземете всички предшественици на възел #11

select a.*
from nodes a
join paths b
on a.node_id = b.ancestor
where b.descendant = 11

трябва да изтриете поддървото на възел #6

delete from paths where descendant in
(select descendant from paths where ancestor = 6)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчислим средните продажби на ден в MySQL

  2. Грешка в MySQL - Имате грешка във вашия SQL синтаксис

  3. PHP и MySql проверяват дали таблицата е празна

  4. php:най-бързият начин за генериране на 5-цифрено число, което все още не е в MySQL db колона (с уникален атрибут)

  5. Хибернация, свързване на две таблици и генериране на json отговор в пролетна спокойна уеб услуга?