Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как лучше сделать структуру таблицы 
:(
    Опции темы
lemniscate
Дата 14.5.2012, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Добрый день уважаемые форумчане! Обращаюсь с такой просьбой, помогите правильно (т.е. как можно проще) организовать структуру данных в mysql и вывод их в php 

в конечном итоге надо получить html-таблицу следующего вида.
Код

<table>
<tr>
 <td rowspan=3>Всего по всем источникам</td>
 <td rowspan=3>Всего по бюджету</td>
 <td colspan=5>в том числе</td>
</tr>

<tr>
 <td rowspan=2>Субсидия по ГЗ</td>
 <td colspan=3>в том числе</td>
 <td rowspan=2>Целевая субсидия</td>
</tr>
<tr>
 <td>Услуги</td>
 <td>Хоз.</td>
 <td>Имущество</td>
</tr>
</table>


user posted image

таблица состоит из источников финансирования, и структура этих источников находится в постоянном изменении. Например могут убрать подисточники, могут источник целиком и т.д. у каждой организации разные источники. Т.е. структура таблицы плавающая. К тому же количество подисточников также варьируется на "глубину", т.е. не известно сколько их может быть, например субсидия по ГЗ это подисточник бюджета, а услуги это источник субсидии на ГЗ. Может произойти так что и у услуги появятся свои подисточники и т.д.

Это маленький кусочек из огромной таблицы. Экономисты раньше вели его в excele, что крайне не удобно. 
Вообщем, конкретно в данном примере, колонки - Услуги, Хоз., Имущество и Целевая субсидия - колонки которые содержат конкретные значения. а Колонки Всего по всем..., Всего по бюджету, Субсидия по ГЗ это колонки с суммами и эти суммы, думаю лучше и не хранить в бд, а суммировать при выводе.  

Подскажите как правильно организовать структуру хранения в бд этих данных. Пока думаю сделать чтобы в одной таблице хранился список всех источников и подисточников, при это в каждой строке указывалось к ид какого источника относится данный подисточник. ну например что то в этом роде: 
user posted image 
где поле plan_src_sub_id и есть указатель на своего "родителя" т.е. к какому источнику относится. Но берут меня сомнения по поводу этого способа. 

Прошу помочь как сделать лучше? 
PM MAIL   Вверх
vlproject
Дата 27.5.2012, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.5.2012

Репутация: нет
Всего: нет



Цитата

где поле plan_src_sub_id и есть указатель на своего "родителя" т.е. к какому источнику относится. Но берут меня сомнения по поводу этого способа. 


Именно так и надо хранить, ведь у каждого источника есть: 
  • свой id
  • свое название
  • id источника-родителя (если такового нет, то 0)

Только при удалении источника не забывайте проверять, есть ли у него дети (из по хорошему тоже удалять надо)
PM   Вверх
lemniscate
Дата 7.6.2012, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Ок, спасибо! так и сделал. 
 Сделал вот такую функцию. 
Код

function read_arr($arr, $n = false){

    static $count = 0;
    
    while(list($k, $v) = each($arr[$n])){

        if(is_array($arr[$v])){ 
                            
               $l .= "<td>".$v."</td>".read_arr($arr, $v);
            
        }

        else{                
            
                $l .= "<td>".$v."</td>";            
            
        }        
    
    }

    return $l;

}


Но вот ни как не могу сообразить, как сделать так чтобы данная функция строила таблицу в том виде которая необходима как в первой теме? Т.е. чтобы все "дочки" были под строкой 'в том числе'.

Это сообщение отредактировал(а) lemniscate - 7.6.2012, 10:39
PM MAIL   Вверх
lemniscate
Дата 25.6.2012, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



неужели никто не знает как? :( 
PM MAIL   Вверх
MaXL
Дата 26.6.2012, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

Репутация: нет
Всего: 2



Цитата
где поле plan_src_sub_id и есть указатель на своего "родителя" т.е. к какому источнику относится. Но берут меня сомнения по поводу этого способа. 

а в вашей структуре могут быть циклы ? т.е. может у какой-то записи быть два родителя ?

lemniscate функцию выводящую это писать лениво. использование рекурсии правильный подход, но может быть стоит пользоваться на colspan и rowspan, а вставлять дополнительные таблицы, содержащие подисточники, т.е. что-то типо:
Код

<table>
  <tr>
    <td rowspan="2">Субсидия по ГЗ</td>
    <td>
      В том числе
      <table>
        <tr>
          <td>Хоз</td>
          <td>Имущество</td>
          <td>...</td>
        </tr>
      </table>
    </td>
  </tr>
</table>

т.е. если есть дочернии, то прописываешь rowspan="2" и рекурсивно вызываешь себя.


--------------------
MaXL
PM MAIL   Вверх
lemniscate
Дата 26.6.2012, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



тогда другой вопрос, если сделать все дочерние элементы в отдельную таблицу то как размеры ячеек вложенной таблицы согласуются с размеры тех данных которые будут ниже, а там может быть более сотни строк содержащие значения ... 
PM MAIL   Вверх
MaXL
Дата 30.6.2012, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

Репутация: нет
Всего: 2



не понял.
ячейка же будет растягиваться, под своё содержимое.


--------------------
MaXL
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1130 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.