Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Nested set model als unordered list (<ul><li>) d

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 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 :D

Code: Alles auswählen

CREATE TABLE `hl_places` &#40;
  `id` int&#40;4&#41; unsigned NOT NULL auto_increment,
  `name` varchar&#40;100&#41; collate latin1_general_ci NOT NULL,
  `lft` int&#40;4&#41; unsigned NOT NULL,
  `rgt` int&#40;4&#41; unsigned NOT NULL,
  PRIMARY KEY  &#40;`id`&#41;
&#41; ENGINE=MyISAM AUTO_INCREMENT=20 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `hl_places` VALUES &#40;'1', 'Home', '1', '24'&#41;;
INSERT INTO `hl_places` VALUES &#40;'2', 'USA', '2', '23'&#41;;
INSERT INTO `hl_places` VALUES &#40;'3', 'CA', '3', '14'&#41;;
INSERT INTO `hl_places` VALUES &#40;'4', 'San Francisco', '4', '5'&#41;;
INSERT INTO `hl_places` VALUES &#40;'12', 'Los Angeles', '6', '9'&#41;;
INSERT INTO `hl_places` VALUES &#40;'13', 'Sunset Blvd', '7', '8'&#41;;
INSERT INTO `hl_places` VALUES &#40;'14', 'Redding', '10', '13'&#41;;
INSERT INTO `hl_places` VALUES &#40;'15', 'Dana Dr', '11', '12'&#41;;
INSERT INTO `hl_places` VALUES &#40;'16', 'CO', '15', '22'&#41;;
INSERT INTO `hl_places` VALUES &#40;'17', 'Denver', '16', '19'&#41;;
INSERT INTO `hl_places` VALUES &#40;'18', 'Champa St', '17', '18'&#41;;
INSERT INTO `hl_places` VALUES &#40;'19', 'Boulder', '20', '21'&#41;;
raus bekommt man die daten dann so (schoen eingerueckt, je nach zone):

Code: Alles auswählen

SELECT 
CONCAT&#40;REPEAT&#40;_latin1'   ', COUNT&#40;parent.name&#41; - 1&#41;, node.name&#41; 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;
oder einfach:

Code: Alles auswählen

SELECT 
node.name, 
&#40;COUNT&#40;parent.name&#41; - 1&#41; 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;
wie bekomme ich diese formatierung aber jetzt mit PHP hin? ich brauche das ergebniss als verschachtetlte liste, also etwa so:

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>
irgendwer ne idee, wie man es optimal hinbekommt - also ohne zuviel schleifendurchlaeufe...?