Показать в таблице - PullRequest
       3

Показать в таблице

0 голосов
/ 21 января 2011

У меня есть такой стол

global_id | auto_trans | add_drivers |child_seat | booster_seat | day   
- - - - - - - -  - - - - - - - -- -- -  - - - - - - --  - - - - - - - -
   18         2          1           5              2            2
- - - - - -  - - - - - - - - - - - - - - - - - - - - -  - - - - - - -  -
   19           5          8           7              6            1 
- - - - - - - -  - - - - - -  - - -  -  - - - - -  - - - - - - - - -  -
   20           2          4           7              9            3
 - - - - - - - - -  -- -  - - - - - -  - - - - - - - -  - - - - - - -  -

Я хочу отобразить значения в таблице в следующем формате

 ___________|__1_|_2_ |_3 |
  |         |    |    |   |
auto_trans  | 5  | 2  | 2 |
- - - - -  - - - - -  - - -
add_drivers | 8  | 1  | 4 |
 -- -  - - -  - - - - - --
child_seat  | 7  | 5  | 7 |
 - - -  - - - - - - - - - -
booster_seat| 6  | 2  | 9 |
 - - - - - - - - - - - - - -

Как написать цикл для этого?

Ответы [ 2 ]

1 голос
/ 21 января 2011

Ответ легкий ? Создав цикл в цикле, в котором будет храниться значение имени столбца по столбцу, а не в какой строке он находится в базе данных (см. Пример ниже, если вы находитесь в рассоле и нуждаетесь в этом как можно скорее). Ответ правильный , однако, заключается в том, что вам, вероятно, необходимо нормализовать вашу базу данных немного дальше. Несмотря на то, что значения кажутся связанными, ваш запрос напечатать их таким образом говорит мне, что ваша база данных может быть немного не в порядке.

<?php
/** Just assuming. */
$results = $db->query( 
    'SELECT auto_trans, add_drivers, child_seat, booster_seat ORDER BY auto_trans' 
)->fetchAll( );

$categorised = array( );
foreach( $results as $result ) {
    foreach( $result as $columname => $value ) {
        if( !array_key_exists( $columnname, $categorised ) ) {
            $categories[$columnname] = array( );
        }
        $categories[$columnname][] = $value;
    }
}

echo "<table>";
echo "<tr>";
foreach( $categories as $category => $values ) {
    echo "<tr>";
    echo "<th>" . $category . "</th>";
    foreach( $values as $value ) {
        echo "<td>" . $value . "</td>";
    }
    echo "</tr>";
}
echo "</table>";
0 голосов
/ 21 января 2011

Ответ сводный или кросс-таблица, но фактическое решение зависит от того, какую базу данных вы используете.

MS SqlServer 2005 имеет команду PIVOT для этого, но многие другие этого не делают.

Поскольку вы используете Php, я предполагаю, что его MySQL och ProstgreSQL

Для PostgreSQL проверьте это: http://www.postgresql.org/docs/current/static/tablefunc.html

Для MySQL это кажется более сложным, проверьте это: http://mysql.bigresource.com/crosstab-query-Pivot-table-1mjeYKlS.html#WAGYCZsH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...