2012-05-11 1 views
1

は、あなたがこのが垂直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 

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

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

印刷ビューでは、50個のフィールドを持つテーブルで、1つのレコードビューを印刷しても、表示可能な印刷物は表示されません。この紙は、第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 ="、 "vertical");ルーピング良い方法はおそらくあります

答えて

0

...そんな

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

何かがあなたが

+1

がhttp://stackoverflow.com/a/3423692/623041 – eggyal

+0

ハ参照テーブル内のすべての単一のフィールドに対して繰り返し、それはかなりファンキーです! – Scuzzy

6

あなたは\Gフラグを使用することができます必要があるだろう構造にあなたの配列を再編成する必要があります。

SELECT * FROM mytbl \G 

UPD:サンプル記事:私は私の質問に答えていないよhttp://slaptijack.com/software/enabling-vertical-g-output-in-the-mysql-client/

+0

これはクライアント特有です([mysql'](http://dev.mysql.com/doc/ja/mysql.html)コマンドラインツールで動作しますが、おそらくPHPでは使えません)。 – eggyal

+0

私は確信していませんが、試してみることをお勧めします。 – deadrunk

+0

これはコマンドラインインターフェイス用である必要があります。私がPHPコードのmysql_queryでそれを試したとき、それは構文エラーで戻ってきます。 –

0

eggyal。これは私の最初の質問へのフォローアップとしてコードを再投稿するstackoverflowで知っている唯一の方法です。

とにかく、あなたのリンクを試しました。 (すなわち、Transposing multidimensional arrays in PHPですが)私の場合はうまくいきません。

あなた自身で試してみることができます。これを試すために必要な2つの機能を付けました。この関数を実行するには、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; 
} 
+0

FYIこのようなフォローアップを追加する場合は、元の質問を編集してそこに含めることができます。第1に、あなたの 'flipDiagonally'関数は、(配列を転置するのに' array_map'を使う)答えたコードではありません。第2に、 'mysql_ *'ライブラリを使用して、結果セット全体の配列で 'flipDiagonally'を呼び出す必要があります(mysql_ *ライブラリを使用して、結果をループしてそのような配列を作成する必要があると思います。代わりにPDOを使用してください。本当に* should * - ['fetchAll'](http://www.php.net/manual/en/pdostatement.fetchall.php)を使うだけです。 – eggyal

関連する問題