我有一张这样的桌子
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 |
- - - - - - - - - - - - - -
如何为此编写循环?
答案 0 :(得分:1)
easy 答案?通过在循环中创建一个循环,该循环将按列名存储列名的值,而不是它在数据库中存储的行(如果您处于泡菜中并且需要尽快解决,请参阅下面的示例)。然而,正确答案是您可能会need to normalise your database更进一步。虽然这些值似乎是相关的,但是您以这种方式打印它们的请求告诉我您的数据库可能有点偏差。
<?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>";
答案 1 :(得分:0)
答案是pivot或交叉表,但实际的解决方案取决于您使用的数据库。
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