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

この種のビューは、2つの場合に非常に便利です。

テーブルビューを印刷するか、フィールドを並べて比較します。

印刷ビューでは、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

おそらくループするより良い方法があります...

$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 に答える
0

egyal 私は私の質問に答えていません。しかし、これは、スタックオーバーフローで、元の質問のフォローアップとしてコードを再投稿する唯一の方法です。

とにかく、私はあなたのリンクを試しました。(つまり、PHPで多次元配列を転置しています)しかし、私の場合はうまくいきません。

自分で試してみることができます。これを試すために必要な2つの関数を添付しました。この機能を実行するために必要なのは、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 に答える