xlebabarov
Registered
Здравейте. От няколко дена се опитвам да се справя с добавянето на категории и подкатегории. Имам следната таблица:
Идеята на таблицата:
ime - името на категорията
sub - това поле играе 2 роли. Ако е 0, то полето не е под категория, а главна. Ако е 1, то полето е подкатегория от 1-ви ред (суб-категория). Ако е 2, то полето е подкатегория от 2-ри ред (суб-суб-категория), ако е n, то полето е подкатегория от n-ти ред ((nxсуб-)категория). Надявам се разбрахте.
subbr - Ако sub>0 (т.е. е подкатегория), то тук се записва ID-то на горната категория
red - тази променлива я използвам, за да подреждам всички категории от един ред
Да приемем, че сте разбрали обяснението ми. Сега искам да покажа всички категории в този вид:
За целта създадох това:
Но скрипта го изкарва ето така:
Предложете как да го направя, че да ги извежда така:
Надявам се, сте ме разбрали. Ако не сте разбрали нещо, питайте :?:
Код:
CREATE TABLE IF NOT EXISTS `kategorii` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ime` varchar(225) NOT NULL,
`sub` int(11) NOT NULL DEFAULT '0',
`subbr` int(11) NOT NULL DEFAULT '0',
`red` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;
--
-- Дъмп (схема) на данните в таблицата `kategorii`
--
INSERT INTO `kategorii` (`id`, `ime`, `sub`, `subbr`, `red`) VALUES
(1, 'Телефони', 0, 0, 1),
(2, 'PC компоненти', 0, 0, 2),
(3, 'Преносими компютри', 0, 0, 3),
(4, 'Мобилни устройства', 0, 0, 4),
(5, 'Техника', 0, 0, 5),
(6, 'Бяла техника', 0, 0, 6),
(7, 'Други', 0, 0, 7),
(8, 'Apple', 1, 1, 1),
(9, 'Asus', 1, 1, 2),
(10, 'BlackBerry', 1, 1, 3),
(11, 'HTC', 1, 1, 4),
(12, 'LG', 1, 1, 5),
(13, 'Motorola', 1, 1, 6),
(14, 'Nokia', 1, 1, 7),
(15, 'Телевизори', 1, 5, 1),
(16, 'Конзоли', 1, 5, 2),
(17, 'Видео-DVD', 1, 5, 3),
(18, 'BR Audio', 1, 5, 4),
(19, 'Аудио Камери/Фото', 1, 5, 5),
(20, '3GS', 2, 8, 1),
(21, '3G', 2, 8, 2),
(22, '2G', 2, 8, 3),
(23, '1G', 2, 8, 4);
Идеята на таблицата:
ime - името на категорията
sub - това поле играе 2 роли. Ако е 0, то полето не е под категория, а главна. Ако е 1, то полето е подкатегория от 1-ви ред (суб-категория). Ако е 2, то полето е подкатегория от 2-ри ред (суб-суб-категория), ако е n, то полето е подкатегория от n-ти ред ((nxсуб-)категория). Надявам се разбрахте.
subbr - Ако sub>0 (т.е. е подкатегория), то тук се записва ID-то на горната категория
red - тази променлива я използвам, за да подреждам всички категории от един ред
Да приемем, че сте разбрали обяснението ми. Сега искам да покажа всички категории в този вид:
Код:
<select name="cat">
<option value="1">Телефони</option>
<option value="8">»Apple</option>
<option value="20">»»3GS</option>
<option value="21">»»3G</option>
<option value="22">»»2G</option>
<option value="23">»»1G</option>
<option value="9">»Asus</option>
<option value="10">»BlackBerry</option>
<option value="11">»HTC</option>
<option value="12">»LG</option>
<option value="13">»Motorola</option>
<option value="14">»Nokia</option>
<option value="2">PC компоненти</option>
<option value="3">Преносими компютри</option>
<option value="4">Мобилни устройства</option>
<option value="5">Техника</option>
<option value="15">»Телевизори</option>
<option value="16">»Козоли</option>
<option value="17">»Видео DVD</option>
<option value="18">»BR Audio</option>
<option value="19">»Аудио Камери/Фото</option>
<option value="6">Бяла техника</option>
<option value="7">Други</option>
</select>
За целта създадох това:
Код:
echo('<select name="cat">
');
$izberi_posledno_nivo = mysql_query("SELECT `subbr`
FROM `kategorii`
ORDER BY `kategorii`.`subbr` DESC
LIMIT 1;") or die1(mysql_error(), 1);
while($krai1 = mysql_fetch_array($izberi_posledno_nivo)){
$krai = $krai1['subbr'];
}
echo($krai);
for($i=0; $i<=$krai; $i++){
if($i==0){
$izberivsi4kiotparvivred = mysql_query("SELECT *
FROM `kategorii`
WHERE `sub` =".$i."
ORDER BY `red` ASC ") or die1(mysql_error(), 2);
while($r1=mysql_fetch_array($izberivsi4kiotparvivred)){
echo('<option value="'.$r1['id'].'">'.$r1['ime'].'</option>');
}
}else{
$izberivsi4kiotparvivred = mysql_query("SELECT *
FROM `kategorii`
WHERE `sub` =".$i."
ORDER BY `red` ASC ") or die1(mysql_error(), 2);
while($r1=mysql_fetch_array($izberivsi4kiotparvivred)){
for($z=1;$z<=$i;$z++){$znak.='»';}
echo('<option value="'.$r1['id'].'">'.$znak.$r1['ime'].'</option>
');
$znak='';
}
}
}
echo('</select>');
Но скрипта го изкарва ето така:
Код:
<select name="cat">
<option value="1">Телефони</option><option value="2">PC компоненти</option><option value="3">Преносими компютри</option><option value="4">Мобилни устройства</option><option value="5">Техника</option><option value="6">Бяла техника</option><option value="7">Други</option><option value="8">»Apple</option>
<option value="15">»Телевизори</option>
<option value="9">»Asus</option>
<option value="16">»Конзоли</option>
<option value="10">»BlackBerry</option>
<option value="17">»Видео-DVD</option>
<option value="11">»HTC</option>
<option value="18">»BR Audio</option>
<option value="19">»Аудио Камери/Фото</option>
<option value="12">»LG</option>
<option value="13">»Motorola</option>
<option value="14">»Nokia</option>
<option value="20">»»3GS</option>
<option value="21">»»3G</option>
<option value="22">»»2G</option>
<option value="23">»»1G</option>
Предложете как да го направя, че да ги извежда така:
Код:
<select name="cat">
<option value="1">Телефони</option>
<option value="8">»Apple</option>
<option value="20">»»3GS</option>
<option value="21">»»3G</option>
<option value="22">»»2G</option>
<option value="23">»»1G</option>
<option value="9">»Asus</option>
<option value="10">»BlackBerry</option>
<option value="11">»HTC</option>
<option value="12">»LG</option>
<option value="13">»Motorola</option>
<option value="14">»Nokia</option>
<option value="2">PC компоненти</option>
<option value="3">Преносими компютри</option>
<option value="4">Мобилни устройства</option>
<option value="5">Техника</option>
<option value="15">»Телевизори</option>
<option value="16">»Козоли</option>
<option value="17">»Видео DVD</option>
<option value="18">»BR Audio</option>
<option value="19">»Аудио Камери/Фото</option>
<option value="6">Бяла техника</option>
<option value="7">Други</option>
</select>
Надявам се, сте ме разбрали. Ако не сте разбрали нещо, питайте :?: