CREATE TABLE connections ( parent_id int(10) UNSIGNED NOT NULL DEFAULT '0', child_id int(10) UNSIGNED NOT NULL DEFAULT '0', depth int(10) UNSIGNED NOT NULL DEFAULT '0' ) TYPE=MyISAM; CREATE TABLE objects ( object_id int(10) UNSIGNED NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (object_id) ) TYPE=MyISAM;
Do tabeli object dodajemy obiekty - to wiadomo.
Do tabeli connections dodajemy wszystkie połączenie z obiektami wyższymi w hierarchi oraz rekord gdzie depth=0 i child_id i parent_id jest równie id-kowi rekordu.
Teraz nasuwa się moj problem jak wypisać wszystkie rekordy w połączeniem do rekordu wyżej w tabeli ?
Ja doszedłem do czegoś takiego:
SELECT name, connections.parent_id AS parent FROM objects LEFT JOIN connections ON connections.child_id=objects.object_id WHERE connections.depth=1
Ale to zapytanie nie wypisze mi gałęzi głównych - root-a - bo do nich nie istnieje połączenie gdzie depth=1. Co poradzicie - prócz dodanie zapytanie o kategorie główne ? Dopisanie na końcu WHERE connections.depth IN (0,1) powoduje powoduje wypisywanie rekordów

EDIT - to jest niemozliwe - trzeba dwa zapytanie wykorzystać....
