Помогите, плиз, с менюшкой

defence

Деклассированный элемент
Помогите, плиз, с менюшкой

Добрый день всем! Такая вот проблема: есть в базе таблица категорий типа | cid | name | parent |. Никак не могу реализовать вывод меню такого вот вида:

если выбрана 1 категория:

ОДЕЖДА
- рубашки
- брюки
- носки

ПАРФЮМЕРИЯ
ПРЕДМЕТЫ БЫТА
И ТАК ДАЛЕЕ

и если выбрана какая-либо другая категория:

ОДЕЖДА
ПАРФЮМЕРИЯ
- одеколоны
- духи
- деодоранты

ПРЕДМЕТЫ БЫТА
И ТАК ДАЛЕЕ

Никак не могу понять, как это реализовать. Помогите!!! Заранее спасибо!
 

rotoZOOM

ACM maniac
Если у тебя дерево высотой ровно 2, то можно реализовать за две выборки:
1. Выбираешь все товары, у которых parent=выбранному cid. Закидываешь их в массив.
2. Выбираешь все элементы у которых parent отсутсвует и печатаешь их попорядку, как только напечатал категорию с cid=выбранный cid, то сразу после этого выводи весь массив полученный на 1 шаге.
 

defence

Деклассированный элемент
2 rotoZOOM: у меня получилось вот что, но выводит все-все подкатегории почему-то...

PHP:
if($cid >0) {	
 $list_cat=mysql_query("SELECT * FROM t_categories ORDER BY cid");
  for($i=0; $i<mysql_num_rows($list_cat); $i++) {
  $lc=mysql_fetch_array($list_cat);
      if($lc["parent"] == 0) {
echo '<a href=catalog.php?cid='.$lc["cid"].'><b>'.$lc["name"].'</b></a><br>';
	

	
	   $dc=mysql_query("SELECT * FROM t_categories WHERE parent=".$lc['cid']." ORDER BY cid ASC");
	while($lcat=mysql_fetch_array($dc)) {
	if($sub !== $lcat["cid"]) {
	echo '&nbsp;&nbsp;&nbsp;<img src=images/dot.gif border=0 align=absmiddle>&nbsp;<a class=catnav href=catalog.php?cid='.$lc["cid"].'&sub='.$lcat["cid"].'>'.$lcat["name"].'</a><br>';
	   
	   } else {
	   
	  echo '&nbsp;&nbsp;&nbsp;<img src=images/dot.gif border=0 align=absmiddle>&nbsp;<b class=date>'.$lcat["name"].'</b><br>'; 
}
      
}
	
}
}
}

что я не так сделал?
 

rotoZOOM

ACM maniac
Ну ... не совсем то ... Пробежавшись бегло, я не нашел где у тебя используется твоя $cid вообще (акромя как в первом if)
попробуй так:
PHP:
if (!$cid)return;
$mas=array();
$list_cat=mysql_query("SELECT * FROM t_categories WHERE parent=$cid ORDER BY cid");
$num=mysql_num_rows($list_cat);
for($i=0; $i<$num; $i++) { 
  $mas[]=mysql_fetch_array($list_cat); 
}
$list_cat=mysql_query("SELECT * FROM t_categories WHERE parent=0 ORDER BY cid");
$num=mysql_num_rows($list_cat);
for($i=0; $i<$num; $i++) { 
  $lc=mysql_fetch_array($list_cat); 
  echo .. вывод категории ...
  if ($lc['cid']==$cid){
     for ($j=0;$j<sizeof($mas);$j++){
            echo ... вывод товара из массива $mas[$j] ...
     }
  }
}
 

defence

Деклассированный элемент
ОГРОМАДНОЕ ТЕБЕ СПАСИБО! буду пробовать...

-~{}~ 11.02.05 13:37:

2 roroZOOM: Все вроде работает, спасибо! Только как мне в массиве
PHP:
$mas[$j]
вывести ссылки подкатегорий, никак не соображу... Выводится слово array... Помоги, пожалуйста...
 

rotoZOOM

ACM maniac
$mas[$j] - это есть массив, который получаешь mysql_fetch_array($list_cat);
поэтому работай с ним как с $lc, то есть
$mas[$j]['cid'] - код товара
$mas[$j]['name'] - наименование .... и т.д.
 

defence

Деклассированный элемент
Спасибо, ты меня спас! от "ковра" начальника! :)
 

rotoZOOM

ACM maniac
Надеюсь, что это оптимальный алгоритм, так как я не смог придумать его реализацию за одну выборку без использования доп. массивов.
 

defence

Деклассированный элемент
за одну выборку, думаю, не получится...
 

rotoZOOM

ACM maniac
ну если такой запрос составить:
SELECT * FROM t_categories WHERE parent=0 OR parent=$cid ORDER BY cid
Тот выберутся только нужные значения, останется их правильно отсортировать.
 

defence

Деклассированный элемент
я пробовал, но с сортировкой еще гиморнее...
 
Сверху