Nested set model als unordered list (<ul><li>) d
Verfasst: 17.07.2009, 07:23
Hallo,
habe hier ein problem mit dem Nested Set Model (). daten gehen zwar rein in meine datenbank, aber wie bekomme ich sie wieder sinnvoll formatiert raus? ich hab hier schonmal mal was vorbereitet
raus bekommt man die daten dann so (schoen eingerueckt, je nach zone):
oder einfach:
wie bekomme ich diese formatierung aber jetzt mit PHP hin? ich brauche das ergebniss als verschachtetlte liste, also etwa so:
irgendwer ne idee, wie man es optimal hinbekommt - also ohne zuviel schleifendurchlaeufe...?
habe hier ein problem mit dem Nested Set Model (). daten gehen zwar rein in meine datenbank, aber wie bekomme ich sie wieder sinnvoll formatiert raus? ich hab hier schonmal mal was vorbereitet

Code: Alles auswählen
CREATE TABLE `hl_places` (
`id` int(4) unsigned NOT NULL auto_increment,
`name` varchar(100) collate latin1_general_ci NOT NULL,
`lft` int(4) unsigned NOT NULL,
`rgt` int(4) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=20 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
INSERT INTO `hl_places` VALUES ('1', 'Home', '1', '24');
INSERT INTO `hl_places` VALUES ('2', 'USA', '2', '23');
INSERT INTO `hl_places` VALUES ('3', 'CA', '3', '14');
INSERT INTO `hl_places` VALUES ('4', 'San Francisco', '4', '5');
INSERT INTO `hl_places` VALUES ('12', 'Los Angeles', '6', '9');
INSERT INTO `hl_places` VALUES ('13', 'Sunset Blvd', '7', '8');
INSERT INTO `hl_places` VALUES ('14', 'Redding', '10', '13');
INSERT INTO `hl_places` VALUES ('15', 'Dana Dr', '11', '12');
INSERT INTO `hl_places` VALUES ('16', 'CO', '15', '22');
INSERT INTO `hl_places` VALUES ('17', 'Denver', '16', '19');
INSERT INTO `hl_places` VALUES ('18', 'Champa St', '17', '18');
INSERT INTO `hl_places` VALUES ('19', 'Boulder', '20', '21');
Code: Alles auswählen
SELECT
CONCAT(REPEAT(_latin1' ', COUNT(parent.name) - 1), node.name) AS name
FROM
hl_places AS node,
hl_places AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.id
ORDER BY node.lft;
Code: Alles auswählen
SELECT
node.name,
(COUNT(parent.name) - 1) AS depth
FROM
hl_places AS node,
hl_places AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.id
ORDER BY node.lft;
Code: Alles auswählen
<ul>
<li>USA
<ul>
<li>CA
<ul>
<li>San Francisco</li>
<li>Los Angeles
<ul>
<li>Sunset Blvd</li>
...
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>