ich habe vor einigen Jahren mir ein Menü aus diesen Vorlagen gebastelt gehabt:
http://www.php- ... -am-besten.html
Meine SQL Abfrage:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT m2.menu_id,
m2.file_name,
m2.sort,
m2.parent_id,
m2.name
FROM menu m
LEFT JOIN menu_has_menu mm
ON ( m.menu_id = mm.child_id )
LEFT JOIN menu m2
ON ( mm.menu_id = m2.parent_id )
LEFT JOIN menu m3
ON ( m.menu_id = m3.menu_id
OR m.parent_id = m3.menu_id )
WHERE m3.file_name = '".$file_name."' OR m.parent_id = 0
GROUP BY m2.menu_id, m2.parent_id, m2.sort
ORDER BY m2.parent_id, m2.sort
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS `menu` (
`menu_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned NOT NULL DEFAULT '0',
`file_name` varchar(255) NOT NULL DEFAULT '',
`name` varchar(255) NOT NULL DEFAULT '',
`sort` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`menu_id`),
UNIQUE KEY `file_name` (`file_name`),
KEY `parent_id` (`parent_id`,`menu_id`)
) ENGINE=MyISAM;
2
3
4
5
CREATE TABLE IF NOT EXISTS `menu_has_menu` (
`menu_id` int(10) unsigned NOT NULL DEFAULT '0',
`child_id` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`menu_id`,`child_id`)
) ENGINE=MyISAM;
So nun bin ich zu der Annahme gekommen das die OR Bedingungen nicht gerade effektiv sind für die Abfragegeschwindigkeit. Da JOINS immer noch nicht meine Leidenschaft sind, wollte ich mal sehen ob mir da mal jemand in die richtige Richtung lenken kann. Eventuell müsste ich die menu_has_menu noch erweitern um auf die OR Bedingungen verzichten zu können.