En supposant que j'ai quelque chose le long des lignes de cet exemple:Nested rejoint sur un arbre naïf mis
CREATE TABLE NaiveTable
{
id BIGINT NOT NULL,
parentId BIGINT NULL,
name VARCHAR(20) NULL,
CONSTRAINT hierarchy FOREIGN KEY (parentId) REFERENCES NaiveTable(id)
PRIMARY KEY (id)
}
En tant que parentId note est une référence à id de NaiveTable (dans le cas où j'ai raté la syntaxe exacte).
Les données sont quelque part le long des lignes de ces
+---------+----------+----------+
| id | parentId | name |
+---------+----------+----------+
| 1 | null | node1 |
+---------+----------+----------+
| 2 | 1 | node2 |
+---------+----------+----------+
| 3 | 1 | node3 |
+---------+----------+----------+
| 4 | 2 | node4 |
+---------+----------+----------+
Nom de la colonne contient des étiquettes unrealated. Je suis à la recherche d'un moyen de construire une requête SQL sur une table MySQL où toutes les informations seront aplaties et triée hiérarchiquement comme ceci:
node 1, depth 0
node 2, depth 1
node 4, depth 2
node 3, depth 1
NOTE: Je ne peux pas modifier le schéma de base de données de quelque façon. Je ne peux créer que des requêtes SQL. Aussi, je ne peux pas utiliser le mot-clé WITH
puisque MySQL ne le supporte pas. Y at-il un moyen de faire une telle requête? Cependant, toute solution à profondeur deux ou au-delà est considéré assez bon.
EDIT: Voici SQL fiddle si vous aimez expérimenter :)
Le tri provient d'une profondeur en premier de l'arbre? Aussi, pouvez-vous écrire une procédure stockée à la place? Je suppose que ce serait beaucoup plus facile. – jmilloy
Le tri est la profondeur en premier. Oui, des procédures m'ont traversé l'esprit, mais je préférerais une requête SQL. Je voudrais noter que même une requête qui fonctionne pour dire la profondeur de trois serait considérée comme une réponse valide. –
Les réponses à [cette question] (http://stackoverflow.com/questions/7999770/how-to-query-a-mysql-table-to-display-the-root-and-its-subchild) illustrent deux principes possibles: procédures stockées et variables de session – PHeiberg