Развернуть содержимое MySQL в HTML таблеце

Progr

Guest
Развернуть содержимое MySQL в HTML таблеце

Такой вопрос:

Здание -> Квартира -> Ванная -> Мыло

В MySQL это выглядет так:

id -- name -- sub
1 -- Здание -- 0
2 -- Квартрира -- 1
3 -- Ванная -- 2
4 -- Мыло -- 3
-------------------------------------
Как вывести это в таблице?
 

Leonid

PHP? нет, не слышал...
Рекурсивной функцией... т.е. вызывающей самоу себя.

function квартира($sub_id)
{
// На входе функции - sub. (Вначале 0)
Вычисляем name и id;
если их нет, выходим...
печатаем name;
квартира (id); //вызываем функцию
}

квартира (0);
 

Оливер Перри

Новичок
Если тебе нужно вывести HTML документ в котором твоя база данный будет представлена в виде таблиц то это делаеися так

<?php
$link_database=mysql_connect("localhost","login","password");
if(!$link_database){die("Не могу подключиться к серверу базы данных MySQL".mysql_error());}
mysql_select_db("ИМЯ_БД",$link_database) or die("Не могу подключиться к ИМЯ_БД<br>".__LINE__.mysql_error());

$resalt=mysql_list_tables("ИМЯ_БД",$link_database);
while($tab_rows=mysql_fetch_row($resalt))
{
print "<br><b>$tab_rows[0]</b><br>";
print "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=3>\n";
$col=mysql_query("SELECT * FROM $tab_rows[0]");
$num_col=mysql_num_fields($col);
$num_table_info=mysql_num_rows($col);
print "<TR BGCOLOR=#E1FFE1> \n";
for($x=0;$x<$num_col;$x++)
{print "<TD>";print (mysql_field_name($col,$x));print "</TD>";}
print "</TR> \n";

for($i=0;$i<$num_table_info;$i++){
print "<TR> \n";
$table_info=mysql_fetch_array($col);
for($x=0;$x<$num_col;$x++)
{
if($table_info[$x]!="")
{print "<TD>$table_info[$x]</TD>";}
else{print "<TD>&nbsp;</TD>";}
}
print "</TR> \n";
}
print "</TABLE> \n";

}

Этот скрипт выводит название каждой таблицы, имена ее столбцов и значения строк
?>
 

ForJest

- свежая кровь
Оливер Перри
Читай, пожалуйста вопрос, перед тем как что-то отвечать. Ему нужно отобразить вложенную структуру. Для этих целей он привёл картинку
 

Патриот

Новичок
сделал рекрусивную фун-ию, но он выводит:
Код:
<table width="50%" border="1"><tr>
<td>Первый уровень</td><tr>
<td>Второй уровень1</td><tr>
<td>Третий уровень1</td><td>Третий уровень2</td><td>Третий уровень3</td></tr>
<td>Второй уровень2</td><tr>
<td>Третий уровень4</td><td>Третий уровень5</td></tr>
</tr>
</tr>
</table>
Подскажите хотя бы теоретически, что нужно подправить?
PHP:
function test($sub)
{
  $q = mysql_query("SELECT * FROM `t_link_cats` WHERE `subcat`='$sub'");
  $num = mysql_numrows($q);
  if($num>0)
  {
    print "<tr>\n";
    while($row = mysql_fetch_array($q))
    {
      $q2 = mysql_query("SELECT * FROM `t_cats` WHERE `id`='$row[cat]' LIMIT 1");
      $row2 = mysql_fetch_array($q2);
      print "<td>".$row2['name']."</td>";
      test($row2['id']);
    }
    print "</tr>\n";
  }
}
print "<table width=\"50%\" border=\"1\">";
test(0);
print "</table>";
 

SiMM

Новичок
Клёвая задачка ;)
Решение примерно следующее (не претендую на понятность изложения):
для начала нужно выстроить дерево, присвоив каждой ветке вес, равный единице. Затем, объединяя пары с низу и записывая в качестве веса полученного узла вес каждого из пары, дойти до верха. Вес используется как свойство colspan тэга td. Как-то так ;)
 

Steamroller

Новичок
для начала нужно выстроить дерево, присвоив каждой ветке вес, равный единице. Затем, объединяя пары с низу и записывая в качестве веса полученного узла вес каждого из пары, дойти до верха. Вес используется как свойство colspan тэга td.
Вроде colspan для каждой ноды равен числу листьев дерева из этой ноды.
Соответственно дерево надо привести к виду, который позволяет это число легко получить.
Либо, если число уровней заранее известно и небольшое (штук 6-7) - в лоб считать.
 

Патриот

Новичок
SiMM
Спасибо, я к этому и иду :)
Уже получилось вывести результат по уровням, осталось только решить проблему с подсчетом colspan и rowspan (это тоже небходимо т.к. в разных уровнях может быть разное кол-во подуровней)
Только я пока пробую все подсчитать во время разворачивания
 
Сверху