Hej odkopuję ten temat po pewnym czasie ponieważ wpadłem na lepsze rozwiązanie.
Oto kod:
<?php
//pobieram wszystkie kategorie dla jezyka polskiego
$sql = \"SELECT * FROM kategoria WHERE przedmiot_id = 1\";
if( $row['parent_id'] == 0 ) {
$parent[] = $row;
} else {
if( isset( $t[ $row['parent_id'] ] ) ) { $t[ $row['parent_id'] ][] = $row;
} else {
$t[ $row['parent_id'] ][0] = $row;
}
}
}
foreach( $parent as $val ){
echo $val['nazwa'] .'<br />'; if( $t[ $val['id_kategoria'] ] ) {
show( $t[ $val['id_kategoria'] ] );
}
}
function show( $arr, $i = 1 ){
foreach( $arr as $parent => $val ) {
if( $t[ $val['id_kategoria'] ] ) {
echo $pre.$val['nazwa'] .'<br>'; show( $t[ $val['id_kategoria'] ], ++$i );
} else {
echo $pre.$val['nazwa'] .'<br>'; }
}
}
?>
Wynik:
Kod
romantyzm
+-------twórczość mickiewicza
+-------+-------Dziady
+-------+-------+-------Nie wiem co tu wpisac
+-------+-------+-------Dramat Konrada;)
+-------+-------Liryki Lozańskie
+-------Słowacki
Struktóra bazy danych opiera się tylko na parent_id. Pole te zawiera numer id kategori nadrzędnej lub 0, gdy kategoria jest na samym wierzchołku.
Struktóra bazy danych i same kategorie:
Kod
DROP TABLE IF EXISTS `kategoria`;
CREATE TABLE `kategoria` (
`id_kategoria` int(11) NOT NULL auto_increment,
`nazwa` varchar(100) NOT NULL default '',
`plik` varchar(100) NOT NULL default '',
`parent_id` int(11) NOT NULL default '0',
`przedmiot_id` int(11) NOT NULL default '0',
PRIMARY KEY (`id_kategoria`)
) TYPE=MyISAM AUTO_INCREMENT=15;
#
# Zrzut danych tabeli `kategoria`
#
INSERT INTO `kategoria` VALUES (1, 'romantyzm', 'romantyzm', 0, 1, '');
INSERT INTO `kategoria` VALUES (2, 'oświecenie', 'oswiecenie', 0, 1, '');
INSERT INTO `kategoria` VALUES (3, 'twórczość mickiewicza', 'tfur-mickiewicz-mickiewicza', 1, 1, '');
INSERT INTO `kategoria` VALUES (4, 'Dziady', '2', 3, 1, '');
INSERT INTO `kategoria` VALUES (5, 'Liryki Lozańskie', 'mickiewicz-liryki-lozanskie', 3, 1, '');
INSERT INTO `kategoria` VALUES (6, 'Nie wiem co tu wpisac', 'nie-wiem-co.wpisac', 4, 1, '');
INSERT INTO `kategoria` VALUES (7, 'Słowacki', 'slowacki-juliusz', 1, 1, '');
INSERT INTO `kategoria` VALUES (8, 'Całki', 'calki', 0, 2, '');
INSERT INTO `kategoria` VALUES (9, 'Rozniczki', 'rozniczki-pochodne', 0, 2, '');
INSERT INTO `kategoria` VALUES (10, 'Wiecej o pochodnych', 'rozniczki-pochodne-wiecej-ekstra', 9, 0, '');
INSERT INTO `kategoria` VALUES (13, 'Funkcje', 'funkcje-matematyczne', 0, 2, '');
INSERT INTO `kategoria` VALUES (14, 'Dramat Konrada;)', 'dramat-konrada-dziady-mickiewicz', 4, 1, '');
Myślę, że przenoszenie takich kategori będzie o wiele łatwiejsze, ponieważ wystarczy zmienić parent_id i mamy już przeniesioną całą kategorię razem z jej dziećmi.
//PS. budowa bazy jest taka a nie inna ponieważ była to modyfikacja istniejącej...