Forum Webscript.Ru

Программирование => PHP => Тема начата: Megalord от 25 Марта 2007, 23:14:02

Название: поворот таблицы на 90 градусов
Отправлено: Megalord от 25 Марта 2007, 23:14:02
есть MySQL БД нужно выбрать из таблицы данные и перед выводом на экран развернуть таблицу
должно быть примерно так:

id | title | param1 |param2 | param3
1 | a     | a1        |a2        |a3
2 |  b    | b1        |b2       |b3
3 | c     | c1        |c2        |c3

<>

id         | 1 | 2 | 3
title      | a | b | c
param1 |a1|b1|c1
param2 |a2|b2|c2
param3 |a3|b3|c3
Название: поворот таблицы на 90 градусов
Отправлено: brainkiller от 26 Марта 2007, 09:59:03
Первое, что приходит в голову - значения записать в массив, а потом по нему еще раз циклом пройти.
Название: поворот таблицы на 90 градусов
Отправлено: Megalord от 26 Марта 2007, 11:45:25
Цитировать
brainkiller:
Первое, что приходит в голову - значения записать в массив, а потом по нему еще раз циклом пройти.


про то что для начала нужно все запихнуть в массив понятно
но просто не хватает фантазии как этот массив потом развернуть
может есть какая функция для поворота массива или придется циклом каждое значение переставлять?
Название: поворот таблицы на 90 градусов
Отправлено: brainkiller от 26 Марта 2007, 14:46:07
[OFF]Ага, прикольная была бы функция: array_rotate($array, 90); :)[/OFF]

К сожалению, просто повернуть его вряд ли получится.

Можно пойти следующим путем. Вначале формируем двумерный массив со значениями примерно такого вида:

$a[0][0]=\'id\'; $a[0][1]=\'title\', ... , $a[0][n]=\'paramN\'
$a[1][0]=\'1\'; $a[1][1]=\'a\', $a[1][2]=\'a1\', ... , $a[1][n]=\'aN\'
$a[2][0]=\'2\'; $a[2][1]=\'b\', $a[2][2]=\'b1\', ... , $a[2][n]=\'bN\'
...
$a[m][0]=\'m\'; $a[m][1]=\'x\', $a[m][2]=\'x1\', ... , $a[m][n]=\'xN\'

Естественно, делаем это не вручную, а вложенным циклом, меняя во внешнем цикле значение m, а во внутреннем - n.

А потом выводим содержимое массива, меняя во внешнем цикле значение n, а во внутреннем - m:

for($i=0; $i    for($j=0; $j        echo $a[$j][$i].\' | \';
    }
    echo \'
\';
}

Код не проверял, но алгоритм примерно такой.
Название: поворот таблицы на 90 градусов
Отправлено: new_coder от 28 Марта 2007, 17:02:42
просто формируешь вывод по другому
ихмо нет лишнит затрат времени

$sql_res = mysql_query("SELECT * FROM program");

$max = mysql_num_rows($sql_res);

for($i = 0; $i < $max; $i++)
{
$res[] = mysql_fetch_assoc($sql_res);
}

$HTML_TABLE .= "";
foreach($res[0] as $key => $value)
{
$HTML_TABLE.="
";
for($i = 0; $i < $max; $i++)
{
$HTML_TABLE.="";
}
$HTML_TABLE.="";
}
$HTML_TABLE .= "
".
$key
."
".
$res[$i][$key]
."
";
Название: поворот таблицы на 90 градусов
Отправлено: AliMamed от 02 Апреля 2007, 13:09:18
можно еще запрос по-другому сформировать через селфджойны
Название: поворот таблицы на 90 градусов
Отправлено: new_coder от 03 Апреля 2007, 09:34:47
интересный вариант. AliMamed черкани пример
Название: поворот таблицы на 90 градусов
Отправлено: Akvar от 16 Мая 2007, 22:18:08
Очень часто использую такое...

if ( ($result=mysql_query(\'SELECT * FROM db_name\'))!==false and (mysql_num_rows($result)>0)){
for ($data=array(); $row=mysql_fetch_assoc($result); )
foreach ($row as $key=>$val) $data[$key][]= $val!==\'\' ? $val : \' \';

echo \'\';
foreach ($data as $key=>$val) echo \'\';
echo \'
\'.$key.\'\'.implode(\'\',$val).\'
\';
}


Но, сколько строк и столбцов ты выводишь ?
(просто если очень много, то прийдется вначале пользоваться MySQL решением - а выводить уже порядно - готовую таблицу )
Название: поворот таблицы на 90 градусов
Отправлено: Akvar от 05 Июля 2007, 13:33:01
Так, сколько строк и столбцов ты выводишь ?
нужно MySQL решение?