Как правильно выводить таблицы

ghost636

Новичок
вот есть у меня данные в базе данных..
в таком виде:
PHP:
REP_orgid	REPyear	 REPquarter		REP_REPTid	REPvalue	REP_USERid		REPdateUpdate
1			2013			1				1		1000			1		2013-04-18
1			2013			1				2		50			4		2013-04-19
1			2013			1				3		75			4		2013-04-20
1			2013			2				1		1100			1		2013-04-19
1			2012			4				1		9000			1		2012-12-21
.......	......и так далее для разных организаций,типов показателей, годов, кварталов.....
,где
REP_orgid- id организации
REPyear - год показателя
REPquarter -квартал показателя (в году четыре квартала)
REP_REPTid - айди показателя
REPvalue - значение показателя
REP_USERid - айди юзера который этот показатель задал
REPdateUpdate - время задавания значения


т.е. при выборке по организации получается вот такой массив:
PHP:
Array
(
    [0] => Array
        (
            [REPid] => 1
            [REP_orgid] => 1
            [REPquarter] => 1
            [REPyear] => 2013
            [REP_REPTid] => 1
            [REPvalue] => 10000
            [REP_USERid] => 1
            [REPdateUpdate] => 2013-04-18
            [REPtimeUpdate] => 01:23:00
        )

    [1] => Array
        (
            [REPid] => 2
            [REP_orgid] => 1
            [REPquarter] => 1
            [REPyear] => 2013
            [REP_REPTid] => 2
            [REPvalue] => 50
            [REP_USERid] => 4
            [REPdateUpdate] => 2013-04-19
            [REPtimeUpdate] => 11:20:33
        )

    [2] => Array
        (
            [REPid] => 3
            [REP_orgid] => 1
            [REPquarter] => 2
            [REPyear] => 2013
            [REP_REPTid] => 1
            [REPvalue] => 11000
            [REP_USERid] => 1
            [REPdateUpdate] => 2013-04-19
            [REPtimeUpdate] => 04:10:00
        )

    [3] => Array
        (
            [REPid] => 7
            [REP_orgid] => 1
            [REPquarter] => 1
            [REPyear] => 2013
            [REP_REPTid] => 3
            [REPvalue] => 75
            [REP_USERid] => 4
            [REPdateUpdate] => 2013-04-20
            [REPtimeUpdate] => 00:10:00
        )

    [4] => Array
        (
            [REPid] => 10
            [REP_orgid] => 1
            [REPquarter] => 4
            [REPyear] => 2012
            [REP_REPTid] => 1
            [REPvalue] => 9000
            [REP_USERid] => 1
            [REPdateUpdate] => 2012-12-21
            [REPtimeUpdate] => 17:57:13
        )

    [5] => Array
        (
            [REPid] => 11
            [REP_orgid] => 1
            [REPquarter] => 4
            [REPyear] => 2012
            [REP_REPTid] => 2
            [REPvalue] => 50
            [REP_USERid] => 1
            [REPdateUpdate] => 2013-04-21
            [REPtimeUpdate] => 17:57:13
        )

    [6] => Array
        (
            [REPid] => 12
            [REP_orgid] => 1
            [REPquarter] => 4
            [REPyear] => 2012
            [REP_REPTid] => 3
            [REPvalue] => 25
            [REP_USERid] => 1
            [REPdateUpdate] => 2012-04-08
            [REPtimeUpdate] => 17:58:44
        )

    [7] => Array
        (
            [REPid] => 13
            [REP_orgid] => 1
            [REPquarter] => 1
            [REPyear] => 2012
            [REP_REPTid] => 4
            [REPvalue] => 3
            [REP_USERid] => 1
            [REPdateUpdate] => 2013-04-01
            [REPtimeUpdate] => 17:58:44
        )

    [8] => Array
        (
            [REPid] => 14
            [REP_orgid] => 1
            [REPquarter] => 4
            [REPyear] => 2011
            [REP_REPTid] => 1
            [REPvalue] => 8000
            [REP_USERid] => 1
            [REPdateUpdate] => 2011-10-12
            [REPtimeUpdate] => 18:00:16
        )

    [9] => Array
        (
            [REPid] => 15
            [REP_orgid] => 1
            [REPquarter] => 4
            [REPyear] => 2011
            [REP_REPTid] => 2
            [REPvalue] => 60
            [REP_USERid] => 
            [REPdateUpdate] => 2013-04-21
            [REPtimeUpdate] => 18:00:16
        )

)
вопрос в следующем
каким образом, на страничку, вывести таблицу вида:
PHP:
2012 год:
квартал	ЧДД	ВВИ	ВНД	СО
1		1200	30	23	2	
2		1200	30	30	2	
3		1300	35	40	1	
4		1350	35	50	4	
2013 год:
квартал	ЧДД	ВВИ	ВНД	СО
1		1350	30	53	1

,где, ЧДД ВВИ ВНД СО - названия показателей по вот этим айди - REP_REPTid, берутся из другой таблицы
?
 

hell0w0rd

Продвинутый новичок
А что конкретно не получается? В смысле код-то где? Или за тебя написать?
 

ghost636

Новичок
Или за тебя написать?
ммм.. а было бы не плохо)))
но вообще я хотел спросить алгоритм чтоли..или типа того..


я делаю вот так:
сначала преобразую массив чтобы получился массив из годов, в каждом массиве годов есть массив кварталов, в каждом массиве кварталов есть массивы с айди показателей, в каждом массиве с айди показателей содержатся значение показателя, время, автор...
(недавно тему создавал с подобным преобразованием)

далее для вывода использую foreach по получившемуся массиву..

но это что-то сложновато.. пол дня можно провозится прежде чем допетрю как правильно все эти циклы сделать для преобразования.. и то даже не сам, а друг помогал.. путаюсь в них ужасно..
но даже это бы ничего, но таблица выведенная foreach`ем несвязна с заголовком таблицы - ЧДД, ВВИ, ВНД, СО которые берутся из другой таблицы.. как бы щас пока 4 параметра, не сложно хтмл код подогнать заголовок таблицы и значения параметров.. но вот не представляю как сделать вывод параметров динамическим.. к примеру показать только два параметра..или три...


в общем подумал может есть какойто способ по проще...
 

hell0w0rd

Продвинутый новичок
А, тебе нужно две таблицы объеденить?
Гугли - JOIN
Примерно так:
PHP:
SELECT table.*, other_table.* LEFT JOIN other_table on table.id = other_table.table_id
 

ghost636

Новичок
мм.. наверно нет.. не в этом дело..
щас тогда покажу как у меня получается
вот после преобразования того массива который у меня в первом 1ом посте этой темы получается такой массив:

PHP:
p_reports: Array
(
    [0] => Array
        (
            [2011] => Array  // ключем этих массов выступают года
                (
                    [1] =>    //  
                    [2] =>    // ключем этих массов выступают кварталы
                    [3] =>     // 
                    [4] => Array //
                        (
                            [1] => Array   // ключем этих массов выступают айди категории (1)
                                (
                                    [REPvalue] => 8000
                                    [REP_USERid] => 1
                                )

                            [2] => Array   // ключем этих массов выступают айди категории (2)
                                (
                                    [REPvalue] => 60
                                    [REP_USERid] => 
                                )

                        )

                )

        )

    [1] => Array
        (
            [2012] => Array
                (
                    [1] => Array
                        (
                            [4] => Array
                                (
                                    [REPvalue] => 3
                                    [REP_USERid] => 1
                                )

                        )

                    [2] => 
                    [3] => 
                    [4] => Array
                        (
                            [1] => Array
                                (
                                    [REPvalue] => 9000
                                    [REP_USERid] => 1
                                )

                            [2] => Array
                                (
                                    [REPvalue] => 50
                                    [REP_USERid] => 1
                                )

                            [3] => Array
                                (
                                    [REPvalue] => 25
                                    [REP_USERid] => 1
                                )

                        )

                )

        )

    [2] => Array
        (
            [2013] => Array
                (
                    [1] => Array
                        (
                            [1] => Array
                                (
                                    [REPvalue] => 10000
                                    [REP_USERid] => 1
                                )

                            [2] => Array
                                (
                                    [REPvalue] => 50
                                    [REP_USERid] => 4
                                )

                            [3] => Array
                                (
                                    [REPvalue] => 75
                                    [REP_USERid] => 4
                                )

                        )

                    [2] => Array
                        (
                            [1] => Array
                                (
                                    [REPvalue] => 11000
                                    [REP_USERid] => 1
                                )

                        )

                    [3] => 
                    [4] => 
                )

        )

)
вывожу на экран вот таким кодом:
PHP:
<table border=1>
<? foreach ($p_reports as $key=>$value) :
	if($key==0) echo '<tr>
			<th>Год</th>
			<th>Квартал</th>
			<th title="Чистый дисконтированный доход">ЧДД</th>
			<th title="Возврат на вложенные инвестиции">ВВИ</th>
			<th title="Внутренняя норма доходности">ВНД</th>
			<th title="Срок окупаемости">СО</th>
			</tr>';

	foreach ( $value as $k=>$v ){

		for ($i=1;$i<5;$i++){
			echo '<tr>';
			if($i==1) echo '<td rowspan="4"  width="40px">'.$k.'</td>';
			echo '<td>';
			echo $i;
			echo '</td>';
			for($j=1;$j<5;$j++){
				if(isset($v[$i][$j]['REPvalue'])) echo '<td>'.$v[$i][$j]['REPvalue'].'</td>';	
				else echo '<td> </td>';
			}
			echo '</tr>';
		}
	} ?>
		<td>
	</tr>
<? endforeach;?>
</table>
получается вот так:
111111.PNG

так вот.
тут заголовки я выставляю вручную:
PHP:
..		<th title="Чистый дисконтированный доход">ЧДД</th>
			<th title="Возврат на вложенные инвестиции">ВВИ</th>
			<th title="Внутренняя норма доходности">ВНД</th>
			<th title="Срок окупаемости">СО</th> ..
можно вывести форичем но с другого массива полученного из другого запроса.. сути не меняется..


какни-будь можно можно этот цикл вывода задать так, чтобы в заголовки вставлялись вставлялись айдишники категорий?? - ключи массива четвертого уровня?
PHP:
[4] => Array
                        (
                            [1] => Array  // вот тут 1 - айди категории
                                (
                                    [REPvalue] => 8000
                                    [REP_USERid] => 1
                                )

                            [2] => Array  // вот тут 2 - айди категории
                                (
                                    [REPvalue] => 60
                                    [REP_USERid] => 
                                )

                        )
а айдишники категрий пропустить через функцию которая выдет массив содержащий аббревиатуру и полное имя категории...?
функцию написал...
 

hell0w0rd

Продвинутый новичок
Вот вообще ничего не понятно. Не нужно никаких преобразований. У тебя есть таблица в бд - тебе ее нужно вывести. Все! Какие преобразования?
PHP:
<table>
    <tr>
        <th>Год</th>
        <th>Квартал</th>
        <th>ЧДД</th>
        <th>ВВИ</th>
        <th>ВНД</th>
        <th>СО</th>
    </tr>
    <?php foreach ($topic_first_post_array as $row): ?>
        <tr>
            <td><?php echo $row['REPyear'] ?></td>
            <td><?php echo $row['REPquarter'] ?></td>
            <td><?php echo $row['CHDD'] ?></td>
            <td><?php echo $row['VVI'] ?></td>
            <td><?php echo $row['VND'] ?></td>
            <td><?php echo $row['SO'] ?></td>
        </tr>
    <?php endforeach ?>
</table>
 

ghost636

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


там же, в первом массиве, один массив равняется одной записи значения, таких значений несколько(на данный момент 4), причем каждое значение приписывается каждому кварталу, каждого года..
 

hell0w0rd

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


там же, в первом массиве, один массив равняется одной записи значения, таких значений несколько(на данный момент 4), причем каждое значение приписывается каждому кварталу, каждого года..
PHP:
$test = array(
    array(
        'year' => 2012,
        'data' => 'boogaga'
    ),
    array(
        'year' => 2012,
        'data' => 'hello'
    ),
    array(
        'year' => 2012,
        'data' => 'world'
    ),
);
$result = array_reduce($test, function($result = array(), $val) {
    $result[$val['year']][] = $val;
    return $result;
});
Ну вот так отсортируй:)
 
Сверху