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

MySQL - Възможно ли е да се получат всички поделементи в йерархия?

Това е просто модел на съседство маса? Тогава не е възможно в една заявка без да се знае максималната дълбочина.

Храна за размисъл е Управление на йерархични данни в MySQL (въпреки че не препоръчвам използването на модела на вложен набор за данни, които се променят редовно).

С много (леви) съединения, по-конкретно:с толкова леви съединения, колкото е максималната дълбочина на дървото, това ще бъде възможно в една заявка. Това е причината много хора да са склонни да запазват „дълбочината“ на конкретна категория, така че ще можете да филтрирате и ограничавате количеството присъединявания към една и съща таблица до по-разумно количество.

Лично, за редовно променяне на данни:склонен съм да конфигурирам задействане при вмъкване/актуализация, което ще запише/кешира текущия „път“ на възел въз основа на идентификатори (например:пътят е „12/62/28/345“ ', в която всяка стъпка между разделителя / е първичният ключ на родителски възел в правилния ред (родителят на 345 е 28, родител на 28 е 62 и т.н.)), така че мога да го потърся само с едно присъединяване по този начин (/ се използва като разделител):

SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND  j.id != o.id  -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;



  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, отказан достъп за потребител 'root'

  3. Chart.js - Получаване на данни от база данни с помощта на mysql и php

  4. MySQL Вмъкване в множество таблици? (Нормализация на базата данни?)

  5. Съхранявайте UUID v4 в MySQL