Участник+


Зарегистрирован: Mar 2003
Место проживания: Барнаул, Россия
Публикаций: 1169
Статус: ![he][es в оф-лайне](images/offline.gif) |
Поможите! Мозги пухнут...
Задача: есть 3 таблицы (2 "справочника" и 1 с данными)
Необходимо вывести их на экран причём по горизонтали строки 1огосправочника, по вертикали 2ого а данные соответственно в центре.
Те. таблица с данными это
id | id_name | id_type | summ
(где соответственно id_name и id_type это idшники 2х справочных таблиц) НО таблицы у нас не простые! Они древовидные!
Ну да хрен бы с ними! Как мне это наиболее красивым образом в HTML то табличку вывести, да ещё и с наименьшими затратами?..
Придумал такую муть:
PHP:
$rashodi = ''; $col = '';
$result = $db->query("SELECT title, level, cleft, cright FROM structura_rashodov ORDER BY cleft ASC");
$kol_vo = $result->numRows(); $min=$max=0;
while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { // Генерим заголовок таблицы
if($row['level'] > 1) { // Столбцы гасходы которых по уровню вложенности больше единицы по умолчанию прячем
$rashodi .= '<td id="td_'.$row['level'].'_'.$row['cleft'].'" onClick="show_columns('.$row['level'].', '.$row['cleft'].', '.$row['cright'].');">l'.$row['level'].$row['title'];
$col .= '<col id="'.$row['level'].'_'.$row['cleft'].'" style="display: none; visibility: collapse;">';
} else {
$rashodi .= '<td id="td_'.$row['level'].'_'.$row['cleft'].'" onClick="show_columns('.$row['level'].', '.$row['cleft'].', '.$row['cright'].');">'.$row['title'];
$col .= '<col id="'.$row['level'].'_'.$row['cleft'].'">';
}
if($min > $row['cleft']) { $min = $row['cleft']; }
if($max < $row['cright']) { $max = $row['cright']; }
}
$result->free();
$result = $db->query("SELECT *, structura_kks.title AS structura_kks_title FROM limits INNER JOIN structura_kks ON limits.structura_kks_id = structura_kks.id INNER JOIN structura_rashodov ON limits.structura_rashodov_id = structura_rashodov.id ORDER BY structura_kks.cleft, structura_rashodov.cleft");
$tr = '';
while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$structura_rashodov = $row['structura_rashodov_id'];
if (isset($structura_kks) && $row['structura_kks_id'] == $structura_kks) {
$tr .= '<td>'.$row['to_year_total']; $td_kol_vo--;
} else {
$structura_kks = $row['structura_kks_id'];
if (isset($td_kol_vo) && $td_kol_vo != $kol_vo) $tr .= str_repeat('<td> ',$td_kol_vo); // Добиваем таблицу пустыми ячейками если для структ. подразделения не указаны какие-то расх.статьи
// Вот тут то и нашёл баг!
// Суммы расходов она будет лепить подряд... Без соотношения со столбцами... :/
$td_kol_vo = $kol_vo;
$tr .= '<tr><td>'.$row['structura_kks_title'].'<td>'.$row['to_year_total'];
$td_kol_vo--;
}
}
if (isset($td_kol_vo) && $td_kol_vo != $kol_vo) $tr .= str_repeat('<td> ',$td_kol_vo);
$parser->site_body .= '<table style="empty-cells: show;" border=1 id="limit_list"><col>'.$col.'
<thead><tr><td>Структура ТО'.$rashodi.'
<tbody>'.$tr.'</tbody>
</table>';
$result->free();
Но чего-то меня от этой конструкции подташнивает!.. Всё как то "гнило" сделано, слишком много "хаков" и не элегантно...
Не подскажете чего умного?.. Уж очень не хочется обращаться к БД в цикле... Перебирая сначала один, а потом второй справочники...
(дело в том, что в этой таблице ещё и строки и столбцы прятать придётся, но это ява, это я отдельный топ создам.)
__________________
Админ - вождь Апачей...
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|