2017-07-26 12 views
-1

私はスパイクテーブルの列を見つけて、スパイククエリの結果に応じてhtmlテーブルを作成することを目的とした、以下のPHPを自分自身持っています。クエリ内のSQLクエリ

もちろん、ループごとにクエリを実行したくないので、ループの前にクエリするために$ schemaを定義しました。しかし、while($ spike ...)セクションで宣言しなければ、それはうまくいきません。私はここで間違って何をしていますか?

私は独自の反応を与えないでください。私は可能な限りSQLソリューション間の相互互換性としてコードを書くことに固執しようとしています。

// Queries 
$q_spikes = "SELECT * FROM spikes"; 
$q_schema = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'spikes'"; 


// Table 
echo "<table>"; 

    echo "<tr>"; 
    $schema = $conn->query($q_schema); 

    while($info = $schema->fetch_assoc()) { 
     echo "<td>" . $info['COLUMN_NAME'] . "</td>"; 
    } 
    echo "</tr>"; 

    $spikes = $conn->query($q_spikes); 

    while($spike = $spikes->fetch_assoc()) { 

     echo "<tr>"; 

     $schema = $conn->query($q_schema); 

     while($info = $schema->fetch_assoc()) { 
      echo "<td>" . $spike[$info['COLUMN_NAME']] . "</td>"; 
     } 
     echo "</tr>"; 

    } 

echo "</table>"; 
+2

たくさんのほほ笑みとフィドルがあります – RiggsFolly

+0

'$ spikes'の結果の値を使ってステートメントを準備する必要がない限り、ループ内でクエリを実行する必要はまったくありません。前にクエリを実行してからすべての反復。 – arielnmz

+0

すべての '$ q_schema'を取り除き、' $ spike'を反復するだけです。またあなたの文字列の前に 'N'は何ですか? – chris85

答えて

0

RiggsFollyさんのコメントに基づいて、私はこれで私の目標を達成することができました:私は本当のクエリの最初の行に簡単な `array_keys($スパイクが)`これを行うと思う

// Queries 
    $q_spikes = "SELECT * FROM spikes"; 
    $needshead = true; 

    // Table 
    echo "<table>"; 
     $spikes = $conn->query($q_spikes); 
     while($spike = $spikes->fetch_assoc()) { 
      if($needshead) { 
       $needshead = false; 
       echo '<tr>'; 
        foreach ($spike as $key => $value) { 
        echo '<td>' . $key . '</td>'; 
        } 
       echo '<tr>'; 
      } 
      echo "<tr>"; 
       foreach ($spike as $key => $value) { 
        echo "<td>" . $value . '</td>'; 
       } 
      echo "</tr>"; 
     } 
    echo "</table>";