I’ve got a little challenge here for you all, there is the data:
CREATE TABLE vCategoryTree (
level1 INT UNSIGNED DEFAULT NULL,
level2 INT UNSIGNED DEFAULT NULL,
level3 INT UNSIGNED DEFAULT NULL,
level4 INT UNSIGNED DEFAULT NULL,
level5 INT UNSIGNED DEFAULT NULL
);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 43, 44, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 43, 45, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 43, 46, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 48, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 49, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 50, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 51, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 52, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 53, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 54, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 55, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 56, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 57, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 58, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 59, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 47, 60, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 62, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 63, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 64, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 65, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 66, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 67, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 68, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 69, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 2, 61, 70, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 9, 10, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 9, 25, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 9, 26, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 11, 12, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 11, 13, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 15, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 16, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 17, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 18, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 19, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 20, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 21, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 22, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 23, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 24, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 4, 14, 27, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 28, 29, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 28, 34, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 28, 37, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 28, 38, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 28, 39, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 28, 41, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 28, 42, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 30, 31, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 30, 35, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 30, 40, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 32, 33, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 5, 32, 36, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 6, 7, NULL, NULL);
INSERT INTO `vCategoryTree` (`level1`, `level2`, `level3`, `level4`, `level5`) VALUES (0, 6, 8, NULL, NULL);
It is the result of various experiment at transforming an adjacency model to a modified preorder tree taversal model all in MySQL.
What i need to do here, is generate a list from these levels into a row based result tree, for example, i’m looking to get:
2
43
45
47
48
49
50
51
...
4
9
10
25
26
11
12
13
...
32
33
36
6
7
8
The … are just a cut in the expected data so i can provide more of the example without actually pasting the whole thing i need, i’m not expecting … to appear in there.
Hope this is enough…
And NO, i don’t want to do it via PHP…
Thank you
First, let’s load your sample data
Now here the very, very ugly query you need
It will present each parent and child and the level of the parent.
Each row whose child is NULL is a leaf in the tree
Now here two stored procedures that I hope gives you basically a treelike display you are seeking
The first stored procedure creates a table called DisplayTree and puts the parent of your choice
The second stored procedure is a recursive one that populates the temp table DisplayTree
Let’s display starting with parent_id 0 :
You do not have to start with parent_id 0. Let’s try parent_id 4 :
CAVEAT
Since recursion is involved, run this
before calling DisplayTree