1

假设您有这样的表格视图

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");

4

3 回答 3

6

您可以使用\G标志。

SELECT * FROM mytbl \G

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

于 2012-05-11T06:04:35.343 回答
0

eggyal 我没有回答我的问题。但这是我在 stackoverflow 上知道的唯一方法,可以重新发布代码作为对我最初问题的跟进。

无论如何,我试过你的链接。(即在 PHP 中转置多维数组)但是,它不适用于我的情况。

你可以自己试试看。我附加了两个功能来尝试这个。您只需要一个 mysql $dbh 连接来执行此功能。您会看到,在我的功能中,我利用了flipdiagonally在该链接中被投票 24 次的功能。

当您调用设置为 $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;
}
于 2012-05-11T06:48:54.233 回答
0

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

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

类似的东西应该将你的数组重新组织成你需要的结构

于 2012-05-11T06:02:56.610 回答