垂直显示mysql表 - 用于比较或打印输出

时间:2012-05-11 05:55:21

标签: php mysql

假设您有这样的表格视图

seed_id     name           country
-------     ----------     -------

1           John           America
2           Jose           Mexico
3           Khan           Pakistan

并且您想要如下垂直绘制HMTL;

seed_id     1             2           3
name        John          Jose        Khan
country     America       Mexico      Pakistan

这种观点在两种情况下非常方便。

您想要打印表格视图,或者想要并排比较字段。

在打印视图中,在包含50个字段的表格中,即使打印单个记录视图也无法显示可见的打印输出。该纸张将在第10个区域左右切割出印刷品。

但是使用垂直视图,表格有多少字段无关紧要。

同样,当你并排比较记录时,就像在这个漂亮的例子中一样

http://www.dpreview.com/products/compare/side-by-side?products=nikon_d90&products=nikon_d3&products=nikon_d4&sortDir=ascending

你得到一个非常有用的观点。

我现在可以坐下来写这个库函数,但此刻没有时间。但我确信那里有人有时间,或已经写过。请你分享一下吗?

getview($ dbh,“select * from tableX where 1 = 1”,“vertical”);

3 个答案:

答案 0 :(得分:6)

您可以使用\G标志。

SELECT * FROM mytbl \G

UPD:示例文章:http://slaptijack.com/software/enabling-vertical-g-output-in-the-mysql-client/

答案 1 :(得分:0)

可能有更好的循环方式......

$table = array();
foreach($result_row as $row)
{
  foreach(array('seed_id','name','country') as $index)
  {
    $table[$index][] = $row[$index];
  }
}

这样的事情应该将你的阵列重新组织成你需要的结构

答案 2 :(得分:0)

eggyal我没有回答我的问题。但这是我在stackoverflow上知道的唯一方法,可以重新发布代码作为我原始问题的后续内容。

无论如何,我尝试了你的链接。 (即Transposing multidimensional arrays in PHP)但是,它对我的​​情况不起作用。

你可以亲自试试看看。我附加了两个功能来尝试这个。你需要的只是一个mysql $ dbh连接来给这个函数一个去。你会看到在我的函数中,我点击了那个在该链接中被投票24次的flipdiagonally函数。

当你将$ direction_v_or_h设置为h,来调用该函数时,它可以工作。但这对我们来说不是新闻。这是我追求的v模式。

尝试使用此限制

SQL_getview($dbh, "select * from yourTable limit 2","h"); 

SQL_getview($dbh, "select * from yourTable limit 2","v"); 

我得到的错误就是这个;重复表格中的每一个字段

Warning: Invalid argument supplied for foreach() in D:\Hosting\5291100\html\blueprint\sql.php on line 739



function SQL_getview($dbh,$sql,$direction_v_or_h = 'h')

{

    $result = $result = mysql_query($sql,$dbh);

    $fields_num = mysql_num_fields($result);

    if ($direction_v_or_h == "h"):
        echo "<table border='1'><tr>";
        // printing table headers
        for($i=0; $i<$fields_num; $i++)
        {
                $field = mysql_fetch_field($result);
                echo "<td>{$field->name}</td>";
        }
        echo "</tr>\n";
        while($row = mysql_fetch_row($result))
        {
                echo "<tr>";
                foreach($row as $cell)
                        echo "<td>$cell</td>";
                        echo "</tr>\n";
        }
        echo "</table>";
    else:
        if (1):    //turn this to 0 to see the good old print_r workaround
            echo "<table border='1'><tr>";
            // printing table headers
            for($i=0; $i<$fields_num; $i++)
            {
                    $field = mysql_fetch_field($result);
                    echo "<td>{$field->name}</td>";
            }
            echo "</tr>\n";
            while($row = mysql_fetch_assoc($result)) 
            {
                    echo "<tr>";
                        $row = flipDiagonally($row);                

                    foreach($row as $cell)
                            echo "<td>$cell</td>";
                            echo "</tr>\n";
            }
            echo "</table>";
        else:
            while($row = mysql_fetch_assoc($result)) 
            {
                    echo "<tr>";
                    echo "<pre>";
                    print_r ($row);
                    echo "</pre>";
                    echo "<hr>";
            }

        endif;
    endif;
    mysql_free_result($result); 
}


function flipDiagonally($arr) {
    $out = array();
    foreach ($arr as $key => $subarr) {
        foreach ($subarr as $subkey => $subvalue) {
                $out[$subkey][$key] = $subvalue;
        }
    }
    return $out;
}