Вывод больших таблиц

Подскажите пожалуйста какой-нибудь прием, чтобы вывести большую таблицу в которой есть конечный элемент (данные по расходу по дням), сгруппированные по объектам 3 уровня, которые сгруппированы по объектам 2 уровня, которые в свою очередь входят в объекты 1 уровня.
Примерно предполагаю как это сделать, но получается очень громоздкое решение. В частности из базы я предполагаю вытаскивать данные 2мя вариантами и все не могу понять, как все же лучше.

$select = 'newEraM.id AS id_m, newEraM.name AS m_name, newEraOrg.id AS id_org, newEraOrg.name AS org_name, newEraWorks.id AS id_work, newEraWorks.name AS work_name, newEraObj.id AS id_obj, newEraObj.name AS obj_name, newEraDtObj.id AS id_dt_obj, newEraDtObj.name AS dt_obj_name, newEraObj.id_obj_types, newEraObjTypes.id AS id_obj_type, newEraObjTypes.name AS obj_type_name, newEraDtData.id AS id_dt_data, newEraObj.id_m, newEraDtObj.id_obj, newEraDtData.id_obj, newEraDtData.date AS date, newEraDtData.fact_income AS fact_income, newEraDtData.fact_expense AS fact_expense, newEraDtData.fact_inner_income AS fact_inner_income, newEraDtData.fact_inner_expense AS fact_inner_expense, newEraDtData.fact_residue AS fact_residue';

$c = $modx->newQuery('newEraDtData');

$c->select($select);

$c->innerJoin('newEraDtObj', 'newEraDtObj'); // arguments are: className, alias
$c->innerJoin('newEraOrg', 'newEraOrg', 'newEraDtObj.id_org = newEraOrg.id');
$c->innerJoin('newEraWorks', 'newEraWorks', 'newEraDtObj.id_work = newEraWorks.id');
$c->innerJoin('newEraObj', 'newEraObj', 'newEraDtObj.id_obj = newEraObj.id');
$c->innerJoin('newEraObjTypes', 'newEraObjTypes', 'newEraObj.id_obj_types = newEraObjTypes.id');
$c->innerJoin('newEraM', 'newEraM', 'newEraObj.id_m = newEraM.id');
if ($_POST['show_org']) {
    $c->where(array(
        'newEraOrg.id:IN' => $_POST['show_org'],
    ));
}
if ($_POST['show_obj']) {
    $c->where(array(
        'newEraObj.id:IN' => $_POST['show_obj'],
    ));
}
$c->sortby('newEraDtData.date', 'ASC');
$objects = $modx->getIterator('newEraDtData', $c);
$count_objects = $modx->getCount('newEraDtData', $c);
$i = 0;

foreach ($objects as $object) {
    $object_data[$i]['m_name'] = $object->get('m_name');
    $object_data[$i]['obj_name'] = $object->get('obj_name');
    $object_data[$i]['obj_type_name'] = $object->get('obj_type_name');
    $object_data[$i]['org_name'] = $object->get('org_name');
    $object_data[$i]['work_name'] = $object->get('work_name');
    $object_data[$i]['dt_obj_name'] = $object->get('dt_obj_name');
    $object_data[$i]['date'] = $object->get('date');
    $object_data[$i]['fact_income'] = $object->get('fact_income');
    $object_data[$i]['fact_expense'] = $object->get('fact_expense');
    $object_data[$i]['fact_inner_income'] = $object->get('fact_inner_income');
    $object_data[$i]['fact_inner_expense'] = $object->get('fact_inner_expense');
    $object_data[$i]['fact_residue'] = $object->get('fact_residue');
    $i++;
}
и

$select = 'newEraM.id AS id_m, newEraM.name AS m_name, newEraOrg.id AS id_org, newEraOrg.name AS org_name, newEraWorks.id AS id_work, newEraWorks.name AS work_name, newEraObj.id AS id_obj, newEraObj.name AS obj_name, newEraDtObj.id AS id_dt_obj, newEraDtObj.name AS dt_obj_name, newEraObj.id_obj_types, newEraObjTypes.id AS id_obj_type, newEraObjTypes.name AS obj_type_name, newEraDtData.id AS id_dt_data, newEraObj.id_m, newEraDtObj.id_obj, newEraDtData.id_obj, newEraDtData.date AS date, newEraDtData.fact_income AS fact_income, newEraDtData.fact_expense AS fact_expense, newEraDtData.fact_inner_income AS fact_inner_income, newEraDtData.fact_inner_expense AS fact_inner_expense, newEraDtData.fact_residue AS fact_residue';

$c = $modx->newQuery('newEraDtData');

$c->select($select);

$c->innerJoin('newEraDtObj', 'newEraDtObj'); // arguments are: className, alias
$c->innerJoin('newEraOrg', 'newEraOrg', 'newEraDtObj.id_org = newEraOrg.id');
$c->innerJoin('newEraWorks', 'newEraWorks', 'newEraDtObj.id_work = newEraWorks.id');
$c->innerJoin('newEraObj', 'newEraObj', 'newEraDtObj.id_obj = newEraObj.id');
$c->innerJoin('newEraObjTypes', 'newEraObjTypes', 'newEraObj.id_obj_types = newEraObjTypes.id');
$c->innerJoin('newEraM', 'newEraM', 'newEraObj.id_m = newEraM.id');
if ($_POST['show_org']) {
    $c->where(array(
        'newEraOrg.id:IN' => $_POST['show_org'],
    ));
}
if ($_POST['show_obj']) {
    $c->where(array(
        'newEraObj.id:IN' => $_POST['show_obj'],
    ));
}
$c->sortby('newEraDtData.date', 'ASC');
$objects = $modx->getIterator('newEraDtData', $c);
$count_objects = $modx->getCount('newEraDtData', $c);
foreach ($objects as $object) {
    $object_data[$object->get('id_m')]['m_name'] = $object->get('m_name');
    $object_data[$object->get('id_m')][$object->get('id_obj')]['obj_name'] = $object->get('obj_name');
    $object_data[$object->get('id_m')][$object->get('id_obj')]['obj_type_name'] = $object->get('obj_type_name');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')]['org_name'] = $object->get('org_name');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')]['work_name'] = $object->get('work_name');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')]['dt_obj_name'] = $object->get('dt_obj_name');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')][$object->get('id_dt_data')]['date'] = $object->get('date');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')][$object->get('id_dt_data')]['fact_income'] = $object->get('fact_income');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')][$object->get('id_dt_data')]['fact_expense'] = $object->get('fact_expense');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')][$object->get('id_dt_data')]['fact_inner_income'] = $object->get('fact_inner_income');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')][$object->get('id_dt_data')]['fact_inner_expense'] = $object->get('fact_inner_expense');
    $object_data[$object->get('id_m')][$object->get('id_obj')][$object->get('id_dt_obj')][$object->get('id_dt_data')]['fact_residue'] = $object->get('fact_residue');
    $disabled = "disabled";
}
GrinRom
20 февраля 2015, 16:16
modx.pro
526
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0